2012-05-03 42 views
6

Tôi có truy vấn này -MYSQL truy vấn, tham gia 2 bảng của vấn đề

SELECT interest_desc, categoryID, MAX(num_in_cat) AS num_in_cat 
FROM 
(
    SELECT interest_desc, categoryID, COUNT(categoryID) AS num_in_cat 
    FROM interests 
    GROUP BY interest_desc, categoryID 
) subsel 
GROUP BY interest_desc, categoryID 

Tôi muốn thay đổi nó vì vậy mà tôi cuối cùng có thể hiển thị tên loại từ một bảng riêng biệt gọi là categories. Tất cả tôi có thể hiển thị là categoryID từ interests với sql này

Cả hai cấu trúc bảng là

#interests 

CREATE TABLE `interests` (
`interestID` int(11) NOT NULL AUTO_INCREMENT, 
`name` varchar(100) NOT NULL, 
`categoryID` int(11) NOT NULL, 
`sessionID` int(11) NOT NULL, 
`interest_desc` varchar(30) NOT NULL, 
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
PRIMARY KEY (`interestID`) 
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 

loại cấu trúc bảng

# categories 
CREATE TABLE `categories` (
`categoryID` int(11) NOT NULL AUTO_INCREMENT, 
`category_desc` varchar(100) NOT NULL, 
PRIMARY KEY (`categoryID`) 
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 

Tôi biết một tham gia của một số loại là cần thiết nhưng tôi đã xem xét tại các ví dụ và đang đấu tranh để có được cú pháp chính xác.

Tôi có điều này trong một kịch bản php - báo cáo kết quả echo là này

"{$result['interest_desc']} was the most popular in category {$result['categoryID']} with {$result['num_in_cat']} occurrences\n"; 

và đầu ra của nó là thế này -

"Adidas was the most popular in category 5 with 1 occurrences" 

Tôi muốn đầu ra là "Adidas là phổ biến nhất trong Thể thao với 1 lần xuất hiện "

Tuy nhiên truy vấn sql của tôi không có tính năng category_desc.

Trả lời

0

SELECT * FROM interests i LEFT JOIN categories c ON i.categoryID = c.categoryID

Tôi chưa thử nghiệm. Có thể có lỗi cú pháp.

1

Vui lòng kiểm tra điều này, Nó sẽ cung cấp cho bạn kết quả cần thiết.

SELECT subsel.interest_desc, cat.category_desc, MAX(num_in_cat) AS num_in_cat 
FROM 
(
    SELECT interest_desc, categoryID, COUNT(categoryID) AS num_in_cat 
    FROM interests 
    GROUP BY interest_desc, categoryID 
) subsel 
inner join categories as cat on subsel.categoryID = cat.categoryID 
GROUP BY interest_desc, subsel.categoryID 
+0

tôi nhận được lỗi này với điều này - đúng cú pháp để sử dụng gần 'int bên tham gia loại như mèo trên int.categoryID = cat.categoryID GRO' tại dòng 5 – DIM3NSION

+0

Thử thay thế 'AS int' thành' AS ints' và thay thế tất cả các từ 'int' thành' ints' khác. int có thể được dành riêng từ. –

2

Đây là hiệu suất nhanh hơn khôn ngoan

SELECT subsel.interest_desc, subsel.categoryID, cat.category_desc, MAX(num_in_cat) AS num_in_cat 
    FROM 
    (
     SELECT interest_desc, categoryID, COUNT(categoryID) AS num_in_cat 
     FROM interests 
     GROUP BY interest_desc, categoryID 
    ) subsel 
    inner join categories as cat on subsel.categoryID = cat.categoryID 
    GROUP BY interest_desc, subsel.categoryID 
0

Tôi không biết những gì kịch bản thực tế hai truy vấn tương tự như bạn gửi có ý nghĩa. Tôi sẽ nói rằng bạn có thể đi với thẳng này:

SELECT  i.interest_desc, c.category_desc, COUNT(i.categoryID) AS num_in_cat 
FROM  interests AS i 
INNER JOIN categories AS c USING (categoryID) 
GROUP BY i.interest_desc, i.categoryID 
Các vấn đề liên quan