Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zapytanie - art, tag, kategoria
LonelyKnight
post
Post #1





Grupa: Zarejestrowani
Postów: 240
Pomógł: 13
Dołączył: 1.06.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Hej,

Może mi ktoś pomóc w ułożeniu zapytania, który wybiera artykuł, jego tagi i kategorie w jakich jest dodany?

BD:

arts - id, tytuł, treść
categories - id, nazwa kategorii
tags - id, tag

art2cat - złączeniowa ID art do ID kategorii
art2tag - złączeniowa ID art do ID tagów

i teraz chce wybrać np. 10 artów + kategorie i tagi tych artów - jednym zapytaniem najlepiej ;-) Jeden art może mieć wiele tagów i wiele kategorii.


--------------------
Good programming is 99% sweat and 1% coffee.
Make it idiot proof and someone will make a better idiot...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
skowron-line
post
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Cytat(LonelyKnight @ 29.10.2009, 13:05:12 ) *
arts - id, tytuł, treść
categories - id, nazwa kategorii
tags - id, tag

art2cat - złączeniowa ID art do ID kategorii
art2tag - złączeniowa ID art do ID tagów

To są tabele ? bo średnio rozumiem ten zapis.


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
LonelyKnight
post
Post #3





Grupa: Zarejestrowani
Postów: 240
Pomógł: 13
Dołączył: 1.06.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


  1.  
  2. --
  3. -- Struktura tabeli dla `art2cat`
  4. --
  5.  
  6. CREATE TABLE IF NOT EXISTS `art2cat` (
  7. `artID` int(10) UNSIGNED NOT NULL,
  8. `catID` mediumint(8) UNSIGNED NOT NULL,
  9. KEY `artID` (`artID`),
  10. KEY `catID` (`catID`)
  11. ) ENGINE=MyISAM;
  12.  
  13. -- --------------------------------------------------------
  14.  
  15. --
  16. -- Struktura tabeli dla `art2tag`
  17. --
  18.  
  19. CREATE TABLE IF NOT EXISTS `art2tag` (
  20. `artID` int(10) UNSIGNED NOT NULL,
  21. `tagID` int(10) UNSIGNED NOT NULL,
  22. KEY `artID` (`artID`,`tagID`)
  23. ) ENGINE=MyISAM;
  24.  
  25. -- --------------------------------------------------------
  26.  
  27. --
  28. -- Struktura tabeli dla `arts`
  29. --
  30.  
  31. CREATE TABLE IF NOT EXISTS `arts` (
  32. `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  33. `ownerID` int(10) UNSIGNED NOT NULL,
  34. `title` varchar(200) NOT NULL,
  35. `art` longtext NOT NULL,
  36. `published` tinyint(1) NOT NULL,
  37. `add_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  38. `add_ip` varchar(15) NOT NULL,
  39. PRIMARY KEY (`id`),
  40. KEY `ownerID` (`ownerID`)
  41. ) ENGINE=MyISAM;
  42.  
  43. -- --------------------------------------------------------
  44.  
  45. --
  46. -- Struktura tabeli dla `categories`
  47. --
  48.  
  49. CREATE TABLE IF NOT EXISTS `categories` (
  50. `id` mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT,
  51. `category` varchar(100) NOT NULL,
  52. PRIMARY KEY (`id`),
  53. KEY `artID` (`category`)
  54. ) ENGINE=MyISAM;
  55.  
  56. -- --------------------------------------------------------
  57.  
  58. --
  59. -- Struktura tabeli dla `tags`
  60. --
  61.  
  62. CREATE TABLE IF NOT EXISTS `tags` (
  63. `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  64. `tag` varchar(25) NOT NULL,
  65. PRIMARY KEY (`id`),
  66. UNIQUE KEY `tag` (`tag`)
  67. ) ENGINE=MyISAM;
  68.  


Zrobiłem to na 3 zapytaniach ale jakby ktoś miał pomysł jak wybrać te rekordy jednym to byłbym wdzięczny.


--------------------
Good programming is 99% sweat and 1% coffee.
Make it idiot proof and someone will make a better idiot...
Go to the top of the page
+Quote Post
thek
post
Post #4





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Taka struktura tabel jaką masz miesza i jednym zapytaniem to łączyć jest po prostu bezsensowne, bo stracisz wiele informacji jeśli z tym chcesz coś więcej robić dalej. O ile są Ci potrzebne tylko same nazwy to możesz użyć group_concat, ale jeśli chcesz już się choćby odnosić do id kategorii lub tagu, który traktujesz owym group_contact to nie ma co na to liczyć.Tak to już jest, że zrobienie kilku zapytań jest czasem sensowniejsze logicznie niż kombinowanie z jednym, gdyż wykona się w krótszym sumarycznie czasie i/lub zwróci dokładniejsze/pełniejsze dane. To, że wiele osób z uporem maniaka składa z kilku jedno, (które zajeżdża bazę) nie znaczy że robią dobrze. Niektórych zresztą nie da się napisać bez utraty części informacji lub modyfikacji tabel.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 19:18