मैं दो तालिकाओं है वापस नहीं:mysql मैच के खिलाफ केस संवेदी परिणाम
CREATE TABLE IF NOT EXISTS `test1` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`bucket_id` int(10) unsigned NOT NULL COMMENT 'folder this component belongs to',
`test1_name` varchar(81) NOT NULL COMMENT 'Name of this component',
`test1_desc` varchar(1024) NOT NULL COMMENT 'Component Description',
PRIMARY KEY (`id`),
FULLTEXT KEY `test1_search` (`test1_name`,`test1_desc`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
CREATE TABLE IF NOT EXISTS `bucket` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`bkt_name` varchar(81) NOT NULL COMMENT 'The name of this bucket',
`bkt_desc` varchar(1024) NOT NULL COMMENT 'A description of this bucket',
`bkt_keywords` varchar(512) DEFAULT NULL COMMENT 'keywords for searches',
PRIMARY KEY (`id`),
FULLTEXT KEY `fldr_search` (`bkt_desc`,`bkt_keywords`,`bkt_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;
बाल्टी सिर्फ एक धारक है, जबकि test1 सभी चीजें हैं जो एक बाल्टी में जाना हैं। उदाहरण के लिए:
INSERT INTO `bucket` (`id`, `bkt_name`, `bkt_desc`, `bkt_keywords`) VALUES
(1, 'Simpsons', 'The Simpsons Cartoon Family was first successful adult cartoon series', 'Homer, Marge, Lisa and Bart'),
(2, 'Griffins', 'The family from the popular family guy series', 'Peter, Lois, Meg, Chris, Stewie, Brian');
INSERT INTO `test1` (`id`, `bucket_id`, `bkt_name`, `bkt_desc`) VALUES
(1, 1, 'Homer Simpson', 'Homer the figurative head of the Simpsons Family and is the husband of Marge'),
(2, 2, 'Peter Griffin', 'Peter the figurative head of the Griffin family on the hit TV seriers The family Guy');
अब, निम्न क्वेरी मैं सभी बाल्टी जिसका नाम, वर्णन या कीवर्ड खोज शब्द "परिवार" होती है या जिसका घटकों शब्द "परिवार")
शामिल देखने के लिए चाहते हैं का उपयोग कर अब तक, मेरे पास यह प्रश्न है और यह मिश्रित केस परिणामों को वापस नहीं कर रहा है क्योंकि "परिवार" में "परिवार" नहीं मिला है।
SELECT *
FROM bucket
RIGHT JOIN test1 ON test1.bucket_id = bucket.id
WHERE
bucket.isvisible > 0 AND
MATCH(bucket.bkt_keywords, bucket.bkt_desc, bucket.bkt_name)
AGAINST('family' IN BOOLEAN MODE) OR
MATCH(test1.test1_name, test1.test1_desc)
AGAINST('family' IN BOOLEAN MODE)
मैं भी जोड़ना चाहिए कि सभी टेक्स्ट फ़ील्ड utf8_general_ci का मिलान के रूप में पूरे तालिका जो MyISAM है करता है।
आपके उदाहरण में बाल्टी विवरण और परीक्षण विवरण दोनों में सभी निचले मामले में "परिवार" है। क्या आप अपनी समस्या का प्रदर्शन करने के लिए एक बेहतर उदाहरण बना सकते हैं? – scwagner
एफवाईआई, test1 के लिए आपके सम्मिलन कथन में फ़ील्ड नाम गलत हैं ('test1_name',' test1_desc' होना चाहिए)। इसके अलावा आपके चयन में bucket.isvisible> 0 है, जो उदाहरण तालिका में शामिल नहीं है। एक बार जब मैंने उन दो चीजों को ठीक कर दिया, तो क्वेरी ने पंक्तियों को वापस कर दिया, इसलिए दुर्भाग्यवश मुझे आपकी वास्तविक समस्या का कारण पता नहीं है। (बेशक पूरी पूंजी की बात एक लाल हेरिंग है, और वास्तविक समस्या यह है कि सिम्पसंस पंक्ति पर bucket.isvisible पैरामीटर!) –
इसके अलावा आप इस तरह की क्वेरी को सरल बना सकते हैं: चुनें * बाल्टी से सही परीक्षण 1 परीक्षा 1 पर .bucket_id = bucket.id कहां मैच (bucket.bkt_keywords, bucket.bkt_desc, bucket.bkt_name, test1.test1_desc, test1.test1_name) के खिलाफ (बूलियन मोड में 'परिवार') –