2013-07-19 76 views
6

Tôi có 2 bảng và đang cố thực hiện một truy vấn để tự lưu một số công việc.Truy vấn SQL với Tham gia, Đếm và ở đâu

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

Tôi muốn tham gia cùng họ vì vậy mà tôi có được id, category id, category name, colour

Sau đó, tôi muốn giới hạn nó để có mặt hàng nào "đỏ" được lựa chọn (WHERE colour != "red") Sau đó, tôi muốn đếm số lượng các bản ghi trong mỗi danh mục (COUNT(id) GROUP BY (category id).

Tôi đã cố gắng:

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" 

Nhưng nó chỉ không hoạt động. Tôi đã thử rất nhiều biến thể và không nhận được kết quả khi tôi thử truy vấn trên.

Trả lời

17

Bạn phải sử dụng GROUP BY vì vậy bạn sẽ có nhiều hồ sơ trả lại,

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

Tôi đã sử dụng phụ truy vấn và nó làm việc tuyệt vời!

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