Tôi có hai bảng:mysql trận đấu với không trở về trường hợp kết quả không nhạy cảm
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 ;
Bucket chỉ là một người giữ khi test1 chứa tất cả những điều đó sẽ đi vào một cái xô. Ví dụ:
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');
Bây giờ, bằng cách sử dụng truy vấn sau đây tôi muốn tìm kiếm tất cả xô tên, mô tả hoặc từ khóa chứa các cụm từ tìm kiếm "gia đình" hoặc có thành phần chứa các từ "gia đình")
Cho đến nay, những gì tôi có là truy vấn này và nó không trả lại kết quả trường hợp hỗn hợp như trong "Gia đình" không được tìm thấy trong khi "gia đình" được.
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)
Tôi cũng nên thêm rằng tất cả các trường văn bản đều có collation của utf8_general_ci cũng như toàn bộ bảng là MyISAM.
Ví dụ của bạn được cung cấp có "họ" trong mọi trường hợp thấp hơn trong cả mô tả thùng và mô tả thử nghiệm. Bạn có thể làm một ví dụ tốt hơn để chứng minh vấn đề của bạn? – scwagner
FYI, tên trường trong câu lệnh chèn của bạn cho test1 là không chính xác (phải là 'test1_name',' test1_desc'). Ngoài ra, SELECT của bạn có bucket.isvisible> 0, không được bao gồm trong bảng ví dụ. Khi tôi đã sửa hai thứ đó, truy vấn trả về cả hai hàng, vì vậy rất tiếc tôi không biết nguyên nhân của vấn đề thực tế của bạn. (Trừ khi tất nhiên vốn toàn bộ vốn là một cá trích đỏ, và vấn đề thực sự là tham số bucket.isvisible trên hàng simpsons!) –
Ngoài ra bạn có thể đơn giản hóa các truy vấn như vậy: SELECT * FROM bucket RIGHT JOIN test1 ON test1 .bucket_id = bucket.id WHERE MATCH (bucket.bkt_keywords, bucket.bkt_desc, bucket.bkt_name, test1.test1_desc, test1.test1_name) AGAINST ('family' IN BOOLEAN MODE) –