【发布时间】:2011-01-05 00:34:21
【问题描述】:
我担心这有点贵。
另外,我很快就会为标签实现一个标准化系统,因此会有额外的连接。
除此之外,我有 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;
【问题讨论】:
-
您要解决的问题是什么,是否只是在数据库中搜索给定的搜索词?过程是什么,你让用户在搜索框中输入数据,然后会发生什么?
-
它只是一个标准搜索,是的。然后像 facebook 一样显示每个类别的 x 个列表;在我的例子中,结果显示了 3 个用户、3 篇文章、3 个视频和 3 个画廊。
-
所以在您的示例中,用户搜索了“hotel london lazy dog”?
-
是的....,我知道奇怪的搜索。大声笑
标签: mysql optimization search query-optimization