2013-07-19 5 views
6

У меня есть 2 таблицы, и я пытаюсь сделать один запрос, чтобы сохранить себе какую-то работу.SQL Query with Join, Count и Where

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

Я хочу присоединиться к ним, так что я получаю id, category id, category name, colour

Тогда я хочу, чтобы ограничить его так, чтобы не «красные» элементы не будут выбраны (WHERE colour != "red") Тогда я хочу, чтобы подсчитать количество записей в каждая категория (COUNT(id) GROUP BY (category id).

Я пытался:

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" 

Но это просто не работает. Я пробовал много вариантов и не получаю никаких результатов, когда я пытаюсь выполнить вышеуказанный запрос.

ответ

17

Вы должны использовать GROUP BY так что вы будете иметь несколько записей возвращается,

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

Я использовал подзапрос и он работал отлично!

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