我目前正在为我的网站开发一个“搜索引擎”,但我遇到了一些困难。
这是我当前的查询:
SELECT * FROM posts WHERE title like '$query%' ORDER BY `title` DESC LIMIT 10
表格帖子中有超过 10k 行。
我还有另一个表:已订阅。订阅的表由 2 列组成,post_id 和 post_title。
当用户搜索时,我想向他显示 10 个帖子(与用户搜索关键字相关),首先是他订阅的帖子(以便在订阅表中),然后是其他帖子。如果他订阅了 10 个以上的帖子,则应该显示 10 个订阅的帖子。如果他订阅的帖子少于 10 个(例如 5 个),则应显示这 5 个已订阅的帖子和其他 5 个未订阅的与他的搜索关键字相关的帖子。
我期待着你的回答,
谢谢
最佳答案
首先不清楚为什么您的数据通过在 subscribed
表中包含 post_title
而被非规范化。
现在,假设查询只依赖于 posts
表中的 title
列,您可以利用 UNION ALL
来实现期望的结果:
(
SELECT 1 subscribed, p.*
FROM posts p JOIN subscribed s
ON p.id = s.post_id
WHERE p.title LIKE 'keyword%'
ORDER BY title DESC
LIMIT 10
)
UNION ALL
(
SELECT 0 subscribed, p.*
FROM posts p LEFT JOIN subscribed s
ON p.id = s.post_id
WHERE s.post_id IS NULL
AND p.title LIKE 'keyword%'
ORDER BY title DESC
LIMIT 10
)
LIMIT 10
这是一个 SQLFiddle 演示
关于php - 如果列值存在于另一个表中,则对表中的行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30289282/