我担心这有点贵。任何人都可以制定出更优化的SQL解决方案吗?
另外,我将很快实现标签的标准化系统,以便有额外的连接。
最重要的是,我有4个表格(tbl_videos,tbl_articles,tbl_galleries和tbl_users),我想要显示它们的三个结果,因此将不得不在一次按下搜索时运行查询四次。
SELECT *,
(
(CASE WHEN `description` LIKE '%hotel%' THEN 1 ELSE 0 END) +
(CASE WHEN `description` LIKE '%london%' THEN 1 ELSE 0 END) +
(CASE WHEN `description` LIKE '%lazy%' THEN 1 ELSE 0 END) +
(CASE WHEN `description` LIKE '%dog%' THEN 1 ELSE 0 END) +
(CASE WHEN `title` LIKE '%hotel%' THEN 1 ELSE 0 END) +
(CASE WHEN `title` LIKE '%london%' THEN 1 ELSE 0 END) +
(CASE WHEN `title` LIKE '%lazy%' THEN 1 ELSE 0 END) +
(CASE WHEN `title` LIKE '%dog%' THEN 1 ELSE 0 END) +
(CASE WHEN `tags` LIKE '%hotel%' THEN 1 ELSE 0 END) +
(CASE WHEN `tags` LIKE '%london%' THEN 1 ELSE 0 END) +
(CASE WHEN `tags` LIKE '%lazy%' THEN 1 ELSE 0 END) +
(CASE WHEN `tags` LIKE '%dog%' THEN 1 ELSE 0 END)
) AS relevance
FROM `table`
WHERE `description` LIKE '%hotel%'
OR `description` LIKE '%london%'
OR `description` LIKE '%lazy%'
OR `description` LIKE '%dog%'
OR `title` LIKE '%hotel%'
OR `title` LIKE '%london%'
OR `title` LIKE '%lazy%'
OR `title` LIKE '%dog%'
OR `tags` LIKE '%hotel%'
OR `tags` LIKE '%london%'
OR `tags` LIKE '%lazy%'
OR `tags` LIKE '%dog%'
ORDER BY relevance DESC
LIMIT 0 , 3;
什么是你正在试图解决的问题,它只是要在数据库中搜索一个给定的搜索词? 什么是过程,你有用户输入数据到搜索框然后会发生什么? – 2010-01-14 10:24:31
它只是一个标准的搜索,是的。然后像Facebook一样显示每个类别的x号码列表;在我的情况下,显示3个用户,3个文章,3个视频和3个画廊作为结果。 – Mark 2010-01-14 10:29:21
因此,在您的示例中,用户搜索了“酒店伦敦懒狗”? – 2010-01-14 10:57:16