2013-07-19 17 views
6

Ho 2 tabelle e sto provando a fare una query per risparmiare un po 'di lavoro.Query SQL con join, conteggio e dove

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

voglio unirmi a loro in modo che ricevo id, category id, category name, colour

Poi voglio limitarlo in modo che ci sono articoli "rossi" sono selezionati (WHERE colour != "red") Poi voglio contare il numero di record ogni categoria (COUNT(id) GROUP BY (category id).

ho cercato:

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" 

ma semplicemente non funziona. Ho provato molte varianti e non ho ottenuto alcun risultato quando ho provato la query precedente.

risposta

17

Devi usare GROUP BY in modo da avere più record restituiti,

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

Ho usato sub-query e ha funzionato grande!

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