Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL][PHP] prosba o pomoc w napisaniu zapytania sql
--bonifacy--
post
Post #1





Goście







Witam, tak jak w temacie mam problem z napisaniem zapytania SQL.
Mam takie tabele:

  1. CREATE TABLE items
  2. (
  3. [indent]item_id INTEGER PRIMARY KEY,
  4. name TEXT,
  5. category_id INTEGER,
  6. FOREIGN KEY(category_id) REFERENCES category(category_id),
  7. FOREIGN KEY(course_id) REFERENCES course(course_id)[/indent]
  8. );
  9.  
  10. CREATE TABLE tags
  11. (
  12. [indent]tag_id INTEGER PRIMARY KEY,
  13. name TEXT,
  14. item_id INTEGER,
  15. FOREIGN KEY(item_id) REFERENCES items(item_id)[/indent]
  16. );


I mam tez tablice tagow w php. Teraz - jak powinno wygladac zapytanie, ktore zwroci tylko te itemy do ktorych odwoluja sie wszystkie tagi z tablicy?
Go to the top of the page
+Quote Post
tr!ckle
post
Post #2





Grupa: Zarejestrowani
Postów: 21
Pomógł: 2
Dołączył: 12.05.2009

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


Cos w ten deseń (nie testowałem):
  1. SELECT DISTINCT items.name AS name FROM items INNER JOIN tags ON tags.item_id = items.item_id WHERE tags.name IN ($tagi_po_przecinku);


$tagi_po_przecinku tworzysz za pomoca funkcji implode z php (pamietaj ze tagi musza byc otoczone apostrofami w zapytaniu)

BTW. Moim zdaniem powinienes miec relacje wiele do wielu miedzy tabela items i tags.
Go to the top of the page
+Quote Post
--bonifacy--
post
Post #3





Goście







Zapytanie dziala ale zwraca itemy do ktorych odwoluje sie przynajmniej jeden z podanych tagow a nie wszystkie. Chodzi mi o warunek "i" nie "lub".

Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




W tym temacie:
http://forum.php.pl/index.php?showtopic=20...mp;#entry997909
podałem odpowiedź na problem, którego rozwiązanie będzie identyczne jak u Ciebie.
Musisz dać tyle left join ile sprawdzasz tagów
Go to the top of the page
+Quote Post
-bonifac-
post
Post #5





Goście







Teraz dziala jak nalezy.

Dzieki wszystkim za pomoc!
Go to the top of the page
+Quote Post
--bonifacy--
post
Post #6





Goście







Witam raz jeszcze.

Zdecydowalem sie na przeprojektowanie bazy z relacja wiele do wielu miedzy tabela items i tags. Teraz wyglada to tak:

  1. CREATE TABLE items
  2. (
  3. item_id INTEGER PRIMARY KEY,
  4. name TEXT,
  5. category_id INTEGER,
  6. FOREIGN KEY(category_id) REFERENCES category(category_id),
  7. );
  8.  
  9. CREATE TABLE tags
  10. (
  11. tag_id INTEGER PRIMARY KEY,
  12. name TEXT
  13. );
  14.  
  15. CREATE TABLE items_tags
  16. (
  17. items_tags_id INTEGER PRIMARY KEY,
  18. item_id INTEGER,
  19. tag_id INTEGER,
  20. FOREIGN KEY(item_id) REFERENCES items(item_id),
  21. FOREIGN KEY(tag_id) REFERENCES tags(tag_id)
  22. );


W zwiazku z tym mam do Was jeszcze jedno pytanie. Jak to samo zapytanie bedzie wygladalo w tym przypadku?
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Analogicznie. Schemat postępowania nie uległ zmianie
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 26.08.2025 - 01:03