Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: If w zapytaniu i tylko jeden wynik
Forum PHP.pl > Forum > Bazy danych > MySQL
Wotekk
Cześć

Mam problem, mam trzy tabele
products, products_translations, products_pack

products_translations
id | name
-------------------------
1 - Normal-1
2 - Normal-2
3 - Normal-3
4 - Pack
=============
products_pack
id_product_pack | id_product_item
------------------------
4 - 1
4 - 2
4 - 3



Poniżej zapytanie, które ma pokazać czy produkt o ID 1, 2 lub 3 jest podpięty do produktu 4.

  1. SELECT products_translations.product_id, name,
  2. (SELECT COUNT( * ) FROM products) AS count,
  3. IF( products_pack.id_product_pack = 4 AND id_product_item = products_translations.product_id, 1, 0 ) active
  4. FROM products_translations, products_pack
  5. WHERE lang_id =1
  6. GROUP BY product_id
  7. ORDER BY products_translations.product_id ASC



Zapytanie wyświetla się prawidłowo tylko dla pierwszego wyniku
  1. id | name | count | active
  2. 1 |Normal-1 |4 | 1
  3. 2 |Normal-2 |4 | 0
  4. 3 |Normal-3 |4 | 0
  5. 4 |Pack |4 | 0

A powinno pokazać dla 3 pierwszych wyników na końcu 1 - gdzie zrobiłem błąd ?
freemp3
Dołącz tabelę products_pack przez LEFT JOIN zamiast w FROM. Teraz wszystkie wiersze z obu tabel są łączone na zasadzie każdy z każdym. Jak usuniesz GROUP BY to zobaczysz, że IF działa poprawnie, ale tylko dla połączeń, w których identyfikatory się pokrywają. Ponieważ stosujesz GROUP BY wyświetlany jest pierwsze połączenie z brzegu, co nie oznacza, że identyfikatory się będą pokrywać. Jeśli przeniesiesz dołączanie tabeli products_pack do LEFT JOIN, w tedy będziesz mógł połączyć tylko te wiersze, których identyfikatory się pokrywają i w kolumnie active będziesz miał wynik, którego oczekujesz.
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.