Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z warunkiem (operatory and, or, like)
Forum PHP.pl > Forum > Bazy danych > MySQL
Skyline
Witam!

Mam problem z zapytaniem SQL. Zapytanie ma operować na dwóch tabelach.

Pierwsza tabela "Produkty" ma pola "idProduktu", "nazwaProduktu", "opisProduktu", "nrKat", "idKategorii", "widoczność".

Druga tabela "Kategorie" ma pola "idKategorii", "nazwaKategorii".

Zapytanie ma na celu znalezienie podanego przez użytkownika słowa w polach "nazwaProduktu", "opisProduktu", "nrKat".

Zapytanie ma zwrócić "idProduktu", "nazwaProduktu", "nrKat", "nazwaKategorii".

Zapytanie:

SELECT `Produkty`.`idProduktu`, `Produkty`.`nazwaProduktu`, `Produkty`.`nrKat`, `Produkty`.`idKategorii`, `Kategorie`.`idKategorii`, `Kategorie`.`nazwaKategorii`
FROM `Produkty`, `Kategorie` WHERE `Produkty`.`idKategorii` = `Kategorie`.`idKategorii` AND `Produkty`.`nazwaProduktu` LIKE '%".$szukane_slowo."%'

działa bez zarzutu.

Problem zaczyna się, gdy chce dodać następne warunki:

OR `Produkty`.`opisProduktu` LIKE '%".$szukane_slowo."%'
OR `Produkty`.`nrKat` LIKE '%".$szukane_slowo."%'

Pozostałe warunki działają, jeśli usunę warunek WHERE `Produkty`.`idKategorii` = `Kategorie`.`idKategorii`, ale jest on niezbedny do pobrania nazwy kategorii zapisanej w drugiej tabeli (Kategorie). Produkty i Kategorie maja wspolny klucz: idKategorii.

Czy ktoś wie, jak powinno wyglądać to zapytanie?


Trzeba było wykluczyc operator AND:

SELECT `Produkty`.`idProduktu`, `Produkty`.`nazwaProduktu`, `Produkty`.`nrKat`, `Produkty`.`idKategorii`, `Kategorie`.`idKategorii`, `Kategorie`.`nazwaKategorii`
FROM `Produkty`LEFT JOIN `Kategorie` ON `Produkty`.`idKategorii` = `Kategorie`.`idKategorii` WHERE `Produkty`.`nazwaProduktu` LIKE '%".$szukane_slowo."%' OR `Produkty`.`opisProduktu` LIKE '%".$szukane_slowo."%' OR `Produkty`.`nrKat` LIKE '%".$szukane_slowo."%'
cyberpooh
SELECT `Produkty`.`idProduktu`, `Produkty`.`nazwaProduktu`, `Produkty`.`nrKat`, `Produkty`.`idKategorii`, `Kategorie`.`idKategorii`, `Kategorie`.`nazwaKategorii`
FROM `Produkty`, `Kategorie` WHERE `Produkty`.`idKategorii` = `Kategorie`.`idKategorii` AND
( `Produkty`.`nazwaProduktu` LIKE '%".$szukane_slowo."%'
OR `Produkty`.`opisProduktu` LIKE '%".$szukane_slowo."%'
OR `Produkty`.`nrKat` LIKE '%".$szukane_slowo."%'
)
Skyline
Dziękuje za odpowiedz. To oczywiście lepsze rozwiązanie. Pozdrawiam
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-2024 Invision Power Services, Inc.