2012-05-03 19 views
6

में शामिल होने मैं इस प्रश्न हैं। सभी मैं प्रदर्शित कर सकते हैं इस एसक्यूएल साथ interests से categoryID हैMySQL क्वेरी, 2 टेबल के मुद्दे

दोनों तालिका संरचनाओं

#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 

श्रेणियों

# 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 

हैं तालिका संरचना मैं एक किसी प्रकार की जरूरत है की में शामिल होने को पता है, लेकिन मैं ध्यान दिया है उदाहरणों पर और सटीक वाक्यविन्यास प्राप्त करने के लिए संघर्ष कर रहे हैं।

मैं एक php स्क्रिप्ट में इस है - echo कथन इस

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

है और इसके उत्पादन यह है -

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

मैं उत्पादन चाहते हो "एडिडास सबसे में लोकप्रिय था 1 घटनाओं के साथ खेल "

हालांकि मेरी एसक्यूएल क्वेरी में category_desc सुविधा नहीं है।

उत्तर

0

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

मैं इसे परीक्षण नहीं किया। वाक्यविन्यास त्रुटियां हो सकती हैं।

1

कृपया इसे जांचें, यह आपको आवश्यक परिणाम देगा।

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

मैं इस के साथ इस त्रुटि मिलती है - लाइन 5 – DIM3NSION

+0

प्रयास में पास 'पूर्णांक भीतरी बिल्ली के रूप में श्रेणियों में शामिल होने int.categoryID = cat.categoryID GRO पर' इस्तेमाल करने का अधिकार वाक्य रचना 'AS int' को 'AS ints' में बदलकर और अन्य सभी को 'int' से' ints' में बदल दें। int आरक्षित शब्द हो सकता है। –

2

यह और अधिक त्वरित प्रदर्शन बुद्धिमान

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

मैं क्या यथार्थवादी परिदृश्यों इसी तरह के दो प्रश्नों के रूप में आप कर भावना पोस्ट में पता नहीं है है। मैं कहूंगा कि आप इस सीधे साथ जा सकते हैं:

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 
संबंधित मुद्दे