2013-07-19 12 views
6

Ich habe 2 Tabellen und versuche, eine Abfrage zu tun, um mir etwas Arbeit zu sparen.SQL-Abfrage mit Join, Count und Wo

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

Ich möchte sie verbinden, so dass ich id, category id, category name, colour

Dann bekomme ich es begrenzen wollen, so dass keine „rot“ Elemente ausgewählt sind (WHERE colour != "red") Dann möchte ich die Anzahl der Datensätze zählen in jede Kategorie (COUNT(id) GROUP BY (category id).

Ich habe versucht:

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" 

Aber es funktioniert einfach nicht. Ich habe viele Variationen ausprobiert und bekomme nur keine Ergebnisse, wenn ich die obige Abfrage versuche.

Antwort

17

Sie haben GROUP BY zu verwenden, so dass Sie wieder mehrere Datensätze haben,

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

I Unter Abfrage verwendet haben, und es funktionierte großartig!

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