Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SOLVED] Sprawdzanie czy kombinacja istnieje
Forum PHP.pl > Forum > Bazy danych > MySQL
wujek2009
Cześć.

Mam tabelę, w której umieszczam różne warianty i użytkownik przesyła warianty przez formularz i chciałbym sprawdzić czy faktycznie one istnieją w systemie.
Tabela ma mniej więcej taką strukturę: id | id_opcji | produkt_id | kod_bezpieczeństwa | Użytkownik wysyła nam parametry "id_opcji"
np. 14, 58, 200 i muszę sprawdzić czy istnieją takie warianty, które mają takie same KODY BEZPIECZEŃSTWA

Przykładowe wpisy:
  1. id | id_opcji | produkt_id | kod_bezpieczenstwa |
  2.  
  3. 1 | 14 | MASŁO | ag8a8s
  4. 2 | 58 | MASŁO | ag8a8s
  5. 3 | 591 | JOGURT | s8sa8g
  6. 4 | 200 | MASŁO | ag8a8s


Teraz myślę nad sformowaniem zapytania, które zwróci mi kod_bezpieczeństwa dla kombinacji 14,58,200 - bądź FALSE jeśli kombinacje nie istnieją
bo nie posiadają takiego samego kodu_bezpieczeństwa

Próbowałem z zapytaniem w postaci:
  1. SELECT count(kod_bezpieczenstwa) AS licz FROM table1 WHERE id_opcji IN(14,58,200) AND product_id = 'MASŁO' GROUP BY kod_bezpieczenstwa LIMIT 1;


ale parametr "IN" nie spełnia swojej funkcji bo nie zadziała on jak bramka "AND" - że te 3 parametry muszą być dla funkcji "IN" wystarczy, że znajdzie w tabeli 14, 58 i już zwróci mi pozytywny wynik.

UNION również nie sprawdza się do końca, ponieważ zwraca również kombinacje z innym "kodem_bezpieczeństwa"
  1. (SELECT kod_bezpieczenstwa FROM table1 WHERE id_opcji = 14 AND product_id = 'MASŁO')
  2. UNION
  3. (SELECT kod_bezpieczenstwa FROM table1 WHERE id_opcji = 58 AND product_id = 'MASŁO')
  4. UNION
  5. (SELECT kod_bezpieczenstwa FROM table1 WHERE id_opcji = 200 AND product_id = 'MASŁO')
Noidea
Twój pierwszy pomysł jest OK, z tym że musisz jeszcze sprawdzić, czy dopasowane zostały wszystkie trzy opcje podane w IN. Można to zrobić na przykład przy użyciu konstrukcji HAVING
  1. SELECT kod_bezpieczenstwa
  2. FROM table1
  3. WHERE id_opcji IN (14, 58, 200) AND produkt_id = 'MASŁO'
  4. GROUP BY kod_bezpieczenstwa
  5. HAING count(kod_bezpieczenstwa) = 3
wujek2009
I mamy rozwiązanie, dziękuje za pomoc :-)
mmmmmmm
Dokładniej to powinno być:
HAVING Count(DISTINCT id_opcji)=3
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.