Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][PHP] prosba o pomoc w napisaniu zapytania sql
Forum PHP.pl > Forum > Przedszkole
-bonifacy-
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?
tr!ckle
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.
-bonifacy-
Zapytanie dziala ale zwraca itemy do ktorych odwoluje sie przynajmniej jeden z podanych tagow a nie wszystkie. Chodzi mi o warunek "i" nie "lub".

nospor
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
bonifac
Teraz dziala jak nalezy.

Dzieki wszystkim za pomoc!
-bonifacy-
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?
nospor
Analogicznie. Schemat postępowania nie uległ zmianie
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.