Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]Wyszukiwarka itemów
alarec
post
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 27.06.2011

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


Witam

Mam banalny problem, którego nie potrafię rozwiązać od kilku dni, albo mam jakaś zaćmę bo wiem ze rozwiązanie powinno być proste a nie mogę na nie wpaść.

Załóżmy ze mam jakaś tebele o nazwie 'testowa'
wygląda ona tak:

cat_id | item
=========
3 | 2
-----------------
3 | 1
-----------------
5 | 2
-----------------
5 | 3
-----------------
8 | 2
-----------------
8 | 1

Wyszukiwarka ma znajdować id item'u który znajduje się tylko w kategoriach 3, 5 i 8.

próbowałem trochę sposobów najbardziej rozsądne to:
  1. SELECT * FROM `testowa` WHERE `cat_id` IN(3,5,8) GROUP BY `cat_id`

zapytanie jest ok, bo zwraca to co bym chcial, ale jeśli damy:
  1. SELECT * FROM `testowa` WHERE `cat_id` IN(3,5,111) GROUP BY `cat_id`

To również otrzymamy wynik, tylko 2 rekordy.
Najlepiej jakby wynikiem był 1 rekord z id item'u który występuje tylko w tych podanych kategoriach.


Gdyby to zadziałało to by było super
  1. SELECT * FROM `testowa` WHERE (`cat_id` LIKE 3) AND (`cat_id` LIKE 5) AND (`cat_id` LIKE 8)

ale niestety nie wiadomo czemu zwraca wynik 0 rekordów.

Może ktoś mi podsunie inny pomysł lub rozwiązanie już?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Ulysess
post
Post #2





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


  1. SELECT *
  2. FROM testowa
  3. WHERE TYPE IN ( 1, 2, 3 )


jeśli chcesz jeszcze posortować według jakiś kryteriów użyj ORDER BY
Go to the top of the page
+Quote Post
alarec
post
Post #3





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 27.06.2011

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


Tak, ale pisałem o tym wyżej.

W twoim zapytaniu "kategorie" 1, 2, 3 wyświetlają znaleziony przedmiot, ale jak użyjemy tego samego zapytania z parametrami 1, 2 i np. 5 to nadal wyswietla wynik, a w tym przypadku jeśli nie ma produktu w takiej kategorii ma zwracać wynik 0.

Nie wiem czy rozumiesz o co mi chodzi czy mam spróbować inaczej wytłumaczyć?

nadal nie rozgryzłem tego.
Może ktoś ma jeszcze jakiś inny pomysł?
Go to the top of the page
+Quote Post
PanGuzol
post
Post #4





Grupa: Zarejestrowani
Postów: 353
Pomógł: 50
Dołączył: 28.07.2005
Skąd: Łaziska Górne

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


Rozumiem, że chcesz aby wyświetlało id które są we wszystkich wymienionych kategoriach?
Spróbuj:
  1. SELECT count(item) AS sum FROM testowa WHERE cat_id IN (1,2,3) GROUP BY item HEAVING sum = 3
ta liczba na końcu to ilość kategorii, czyli jakbyś potrzebował itemy co są w 4 kategoriach na końcu dajesz 4 a nie 3.
Go to the top of the page
+Quote Post
alarec
post
Post #5





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 27.06.2011

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


nie dokładnie o to mi chodziło,
ale bardzo pomogła mi twoja odpowiedź.
Nie wpadłem jakoś na to żeby liczyć ilość wystąpień w tabeli i uwarunkować to. Jest to jeden ze sposobów rozwiązania i myślę że dotychczas najlepszy z moich wszystkich rozwiązań testowych.
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: 24.08.2025 - 14:19