Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] zapytenie do bazy
Forum PHP.pl > Forum > Przedszkole
kurt
Mam tabele:
products
kolumny:
products_id | products_kod
1 xxxxx
2 yyyyyy
3 zzzzzz
....
products_description
kolumny:
products_id | gen | products_description
1 2 xxxxxxxx
2 NULL yyyyyyyy
1 7 xxxxxzzzz
3 2 xxxxxxyyy
...
categories_to_gen
kolumny:
categories_id | gen
1000 1
1002 2
1005 7
....

products_to_categories
products_id | categories_id
1 1000
2 1003
3 1002
....

chodzi o listing wszystkich opisów i kodów produktów dla zadanej kategorii, np 1002,
zapytanie nr 1:
  1. SELECT p.products_kod, pd.products_description
  2. FROM products p, products_description pd, products_to_categories p2c
  3. WHERE p.products_id = pd.products_id
  4. AND p.products_id = p2c.products_id
  5. AND p2c.categories_id = '1002'


sprawa banalna.
Jenak chcę dodać do pytania tabelę categories_to_gen bo wyniki wyszukiwania w products_description mogą dawać różne rezultaty products_description dla takich samych products_id i różnych gen (np: products_id = 1 w tabeli products_description)
I tu jest problem, bo proste włączenie do zapytania, tabeli categories_to_gen:

zapytanie nr 2:
  1. SELECT p.products_kod, pd.products_description
  2. FROM products p, products_description pd, products_to categories p2c, categories_to_gen c2g
  3. WHERE p.products_id = pd.products_id
  4. AND p.products_id = p2c.products_id
  5. AND pd.gen = c2g.gen
  6. AND c2g.categories_id = p2c.categories_id
  7. AND p2c.categories_id = '1002'


będzie wykluczało z wyników te rekordy, dla których gen = NULL w tabeli products_description, a ja chciałbym aby w przypadku nie zefiniowanego gen, takie rekordy były wyświetlane pomimo braku powiązania pd.gen = c2g.gen w tabeli categories_to_gen.

Pytanie - czy jest jakiś sposób na listing rekorów spełniających warunek z zapytania nr 2 ale bez wykluczenia rekordów z gen = NULL w tabeli products_description ?

phpion
Przerób zapytanie na złączenia i korzystaj z JOIN oraz LEFT JOIN (to Cię szczególnie zainteresuje).
kurt
trochę źle napisałem tabelę products_description

teraz poprawnie:
products_description
kolumny:
products_id | gen | products_description
1 2 xxxxxxxx
3 NULL yyyyyyyy
1 7 xxxxxzzzz
3 2 xxxxxxyyy

Left join nie dołączy mi do wyników rekordu
3 NULL yyyyyyyy
z tabeli
products_description

pominie go, bo nie spełnia warunku pd.gen = c2g.gen
w listingu pojawi się tylko
3 2 xxxxxxyyy
phpion
Co nie zmienia faktu, że proponuję skorzystać z podanego przeze mnie rozwiązania.
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.