从3个可能的列中选择,按出现/相关性排序

时间:2013-07-14 00:35:41

标签: php sql database

我的表格包含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);

然而,它似乎只是用任何一个词抓住所有条目。如何通过出现来改进这一点以显示相关性?

2 个答案:

答案 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%'

尽管如此,这对你的问题的“最大到最小”部分没有帮助。