Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zliczenie z wykluczeniem
Forum PHP.pl > Forum > Bazy danych > MySQL
Pyton_000
Siemacie.
Dziś mam totalną pustkę w głowie.

Zapytanie:
  1. SELECT `articlecat`, COUNT(id) AS `count` FROM
  2. (
  3. SELECT `articlecat`, `id`, active FROM `easy_shop_articles`
  4. UNION
  5. SELECT category_id, article_id, -1 FROM `easy_shop_articles_to_category`
  6. ) AS gr
  7. GROUP BY articlecat


Wyjaśnienie:
  1. SELECT `articlecat`, `id`, active FROM `easy_shop_articles`

Tabela produktowa, active przyjmuje (1,2) przy czym 2 - nie aktywne
  1. SELECT category_id, article_id, -1 FROM `easy_shop_articles_to_category`

Tabela z zdodatkowymi dowiązaniami do innych kategorii. Kategoria z pierwszej tabelki tutaj nie występuje.

Generalnie wszystko działa cacy, zlicza super. Jednak nie chcę aby do zliczania były brane produkty które są nie aktywne (active == 2)
Problem jest ponieważ w drugiej tabeli nie ma informacji o active (wpisane -1 w zapytanie)

Chcę osiągnąć dokładnie taki sam wynik ale bez tych produktów nie aktywnych (zarówno z pierwszej jak i drugiej tabeli)
Wiem że muszę użyć HAVING i przegrupować inaczej ale ciemność mi nie pozwala dojrzeć rozwiązania wink.gif Służę wiedzą
Crozin
1. Skopana struktura bazy danych - powinieneś mieć tabelę łączącą artykuły do kategorii (co już masz), a w niej dodatkową kolumnę - czy jest kategorią podstawową.
2. Ułatw sobie życie i w kolumnie active (is_active byłoby czytelniejsze) trzymaj wartości 0/1, nie 1/2.
3. Na chwilę obecną musiałbyś zrobić coś takiego:
  1. ...
  2. SELECT `articlecat`, `id`, active FROM `easy_shop_articles`WHERE active != 2
  3. UNION
  4. SELECT c.category_id, c.article_id, -1 FROM `easy_shop_articles_to_category` c INNER JOIN easy_shop_articles a ON a.id = c.article_id AND c.active != 2
  5. ...
Pyton_000
Crozin żebym to ja projektował to takich głupot bym nie robił smile.gif Niestety to jest "spadek" i nic z tym na chwilę obecną nie mogę zrobić (kod bardzo staary)

Bardzo proste rozwiązanie z JOIN i sprawa załatwiona smile.gif

Gotowy kod
  1. SELECT `articlecat`, count(id) AS `count` FROM
  2. (
  3. SELECT `articlecat`, `id` FROM `easy_shop_articles` WHERE active = 1
  4. UNION
  5. SELECT category_id, article_id FROM `easy_shop_articles_to_category`
  6. JOIN easy_shop_articles ON id = article_id AND active = 1
  7. ) AS gr
  8. GROUP BY articlecat
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.