从多个表中搜索时获得最相关的结果(php,mysql)

时间:2014-03-13 07:01:45

标签: php mysql search

我目前正在从3个表中搜索(在将其排序后将搜索更多)。此查询按查询中列出的表的顺序显示所有结果。我希望首先获得最相关的搜索结果。

(Select name, url, text, 'behandlinger_scat' AS `table` from  behandlinger_scat where name LIKE '%KEYWORD%' OR text LIKE '%KEYWORD%')
UNION
(Select name, url, text, 'hudsykdommer_scat' AS `table` from  hudsykdommer_scat where name LIKE '%KEYWORD%' OR text LIKE '%KEYWORD%')
UNION
(Select name, url, text, 'om_oss' AS `table` from  om_oss where name LIKE '%KEYWORD%' OR text LIKE '%KEYWORD%')

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:3)

您可以使用方法按动态提供结果的点进行排序,如本示例所示(您需要对表进行别名,以便SQL了解您所指的列):

            ORDER BY 
            CASE WHEN name LIKE table.keywords THEN 100 ELSE 0 END +
            CASE WHEN name  LIKE table2.keywords THEN 10 ELSE 0 END +
            CASE WHEN text  LIKE table2.keyword THEN 1 ELSE 0 END
            DESC

这只是一个例子,但概念如下:
你决定了多少"点"每个"匹配"将收到(例如名称匹配关键字是100分,文本匹配它 - 少一点)然后,每一行"累积"与其匹配相关的点,具有最多点的行首先显示。