[mysql] Wybieranie pozycji z odpowiednimi atrybutami., Wyszukiwarka zaawansowana |
[mysql] Wybieranie pozycji z odpowiednimi atrybutami., Wyszukiwarka zaawansowana |
6.12.2019, 14:17:59
Post
#1
|
|
Grupa: Zarejestrowani Postów: 190 Pomógł: 0 Dołączył: 25.11.2015 Ostrzeżenie: (0%) |
Witam.
Mam pewien problem z wyszukiwarką zaawansowaną, przerabiam istniejące już zapytanie SQL. Potrzebuje na liście artykułów w danej kategorii wykonać wyszukiwarkę wg parametrów do których jest przypisany artykuł. Czyli w tabeli blog_art_parametry mam przypisane do danego artykułu parametry. Następnie z formularza wybieram, że chce dla parametru id 11 wartość X, dla parametry 15 wartość Y. Jak jest jeden parametr to wyświetla się poprawnie, ale jak jest kilka parametrów i dodaje kolejny warunek to już nie wyświetla nic: AND (ap.param_id='11' AND ap.wartosc_id='4') ...
Jak zrobić to, żeby dla kolejnych warunków AND (ap.param_id='11' AND ap.wartosc_id='2') ... AND (ap.param_id='15' AND ap.wartosc_id='2') wyświetlało poprawnąwartość. |
|
|
6.12.2019, 15:30:11
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 836 Pomógł: 225 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) |
Zamiast AND użyj OR między nawiasami:
( AND ) OR ( AND ) |
|
|
7.12.2019, 14:38:10
Post
#3
|
|
Grupa: Zarejestrowani Postów: 190 Pomógł: 0 Dołączył: 25.11.2015 Ostrzeżenie: (0%) |
|
|
|
7.12.2019, 14:46:21
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 836 Pomógł: 225 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) |
Może inaczej. Co oznaczają parametry.
Bo może masz źle skonskutrowane zapytanie np. powinieneś użyć INNER JOIN oraz LEFT JOIN. |
|
|
7.12.2019, 14:52:36
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
To jeszcze musiałbyś dodać warunek na ilość parametrów. Tu powinno być raczej zapytanie grupujące z COUNT na tą ilość. Jeśli zaznaczyłeś 2 parametry, to COUNT()=2.
-------------------- |
|
|
7.12.2019, 16:11:53
Post
#6
|
|
Grupa: Zarejestrowani Postów: 190 Pomógł: 0 Dołączył: 25.11.2015 Ostrzeżenie: (0%) |
Może inaczej. Co oznaczają parametry. Bo może masz źle skonskutrowane zapytanie np. powinieneś użyć INNER JOIN oraz LEFT JOIN. Mam listę parametrów. Taką jak 1. Obszar, 2 Typ Artykułu. 3 Tematyka. Jest to mechanizm uniwersalny każdy może sobie definiować liste takich parametrów. blog_params 1 Obszar 2 Typ artykułu 3. Tematyka ... Teraz mam tabele blog_art_parametry czyli połączenia param_id wartosc_id art_id 1 Polska 3 1 Niemcy 5 .... Teraz potrzebuje z listy artykułów blog_art wyświetlić pozycje które dla parametru: Obszar mają wartość 'Polska' (param_id 1) dla parametru Typ Artykułu (param_id 2) mają '3' i dla Tematyka (param_id 3) mają wartośc 'sportowy'. |
|
|
7.12.2019, 20:32:57
Post
#7
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
trueblue podal ci poprawne rozwiązanie
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
8.12.2019, 22:16:41
Post
#8
|
|
Grupa: Zarejestrowani Postów: 190 Pomógł: 0 Dołączył: 25.11.2015 Ostrzeżenie: (0%) |
To jeszcze musiałbyś dodać warunek na ilość parametrów. Tu powinno być raczej zapytanie grupujące z COUNT na tą ilość. Jeśli zaznaczyłeś 2 parametry, to COUNT()=2. Niebardzo rozumnie po co to COUNT, szukam w google zapytań z Group i Count ale tak naprawde nie wiem po co się to stosuje. fajny przykład znalazłem: https://www.daniweb.com/programming/web-dev...g-php-and-mysql Ten post edytował luis2luis 8.12.2019, 23:15:23 |
|
|
9.12.2019, 08:24:05
Post
#9
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
A ja nie bardzo rozumiem dlaczego nie używasz GROUP BY w swoim zapytaniu. Wiesz, że każdy rekord artykułu zostanie zmultiplikowany tyle razy z iloma cechami zostanie połączony? To ma być wynik wyszukiwania?
Skoro, jak podał Ci Tomplus, używasz teraz OR w klauzuli WHERE, to przy połączeniu z trzema wybranymi cechami rekord zmultiplikuje się maksymalnie trzykrotnie. Ale może mniej. Po to w takim przypadku używasz grupowania (bo nie chcesz w wynikach duplikatów) i po to używasz COUNT=3, żeby wybrać tylko te rekordy artykułów, które "połączyły się" z dokładnie trzema cechami. P.S. W linku jest właśnie to co opisałem. -------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 26.04.2024 - 09:55 |