我的表格包含3个文字字段和1个ID。
该表仅用于根据用户搜索的相关性收集帖子的ID。
问题是我缺乏必要的爱因斯坦智力来扭曲SQL连续体以获得理想的结果 -
SELECT `id` FROM `wp_ss_images` WHERE `keywords` LIKE '%cute%' OR `title` LIKE '%cute%' OR `content` LIKE '%cute%'
当然,数据库的数量可能高达20k行,我希望保持高效。
这是一个更新 - 我已经走了全文路线 -
实施例
SELECT `id` FROM `wp_ss_images` WHERE MATCH (`keywords`,`title`,`content`) AGAINST ('+cute +dog' IN BOOLEAN MODE);
然而,它似乎只是用任何一个词抓住所有条目。如何通过出现来改进这一点以显示相关性?
答案 0 :(得分:1)
根据每个字段中关键字出现次数的相关性得到结果列表(意思是可爱首先出现在所有三个字段中,然后出现在两个字段中,等等),你可以做类似这样的事情:
SELECT id
FROM (
SELECT id,
(keywords LIKE '%cute%') + (title LIKE '%cute%') + (content LIKE '%cute%') total
FROM wp_ss_images
) t
WHERE total > 0
ORDER BY total DESC
答案 1 :(得分:0)
你可以连接哪些字段比单独搜索它们更好
SELECT `id` FROM `wp_ss_images` WHERE CONCAT(`keywords`,`title`,`content`) LIKE '%cute%'
尽管如此,这对你的问题的“最大到最小”部分没有帮助。