2013-07-19 25 views
6

Mam 2 tabele i próbuję wykonać jedno zapytanie, aby zaoszczędzić trochę pracy.Zapytanie SQL z łączeniem, policz i gdzie

Table 1: id, category id, colour 
Table 2: category id, category name 

chcę do nich dołączyć, tak aby uzyskać id, category id, category name, colour

Następnie chcę ją ograniczyć tak, aby nie „czerwony” elementy są zaznaczone (WHERE colour != "red") Następnie chcę policzyć liczbę rekordów w każda kategoria (COUNT(id) GROUP BY (category id).

staram:

SELECT COUNT(table1.id), table1.category_id, table2.category_name 
FROM table1 
INNER JOIN table2 ON table1.category_id=table2.category_id 
WHERE table1.colour != "red" 

Ale to po prostu nie działa. Próbowałem wiele odmian i po prostu nie uzyskać wyników, gdy próbuję powyższego zapytania.

Odpowiedz

17

Musisz użyć GROUP BY więc trzeba będzie wiele rekordów zwracane

SELECT COUNT(*) TotalCount, 
     b.category_id, 
     b.category_name 
FROM table1 a 
     INNER JOIN table2 b 
      ON a.category_id = b.category_id 
WHERE a.colour <> 'red' 
GROUP BY b.category_id, b.category_name 
3
SELECT COUNT(*), table1.category_id, table2.category_name 
FROM table1 
INNER JOIN table2 ON table1.category_id=table2.category_id 
WHERE table1.colour <> 'red' 
GROUP BY table1.category_id, table2.category_name 
0

Użyłem sub-query i to działało świetnie!

SELECT *,(SELECT count(*) FROM $this->tbl_news WHERE 
$this->tbl_news.cat_id=$this->tbl_categories.cat_id) as total_news FROM 
$this->tbl_categories 
Powiązane problemy