Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zliczenie z wykluczeniem
Pyton_000
post
Post #1





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


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 (IMG:style_emoticons/default/wink.gif) Służę wiedzą
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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. ...
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 11.10.2025 - 12:27