Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> If w zapytaniu i tylko jeden wynik
Wotekk
post
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 4.12.2006

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


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 ?
Go to the top of the page
+Quote Post
freemp3
post
Post #2





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


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.


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 06:44