MySQL-通过多个关键字按顺序获取相关记录
大概的意思是这样的:先按第一个关键字获取,如果足够,则不必再按第二个获取;如果不够,再按第二个关键字获取,直到获取6个相关文章。有没有办法一次查询就实现?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
大概的意思是这样的:先按第一个关键字获取,如果足够,则不必再按第二个获取;如果不够,再按第二个关键字获取,直到获取6个相关文章。有没有办法一次查询就实现?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
我也比较赞成@浪际天涯 的看法,从业务层处理这个需求,例如
$row = array();
while( count($row) < 6 )
{
// select from table
}
//并且将它放入缓存
一次查询的SQL语句,我没想的出来, 存储过程可以吧
不考虑其他效率问题,来回答你的问题,还是有解的,而且方法可能有很多种。。
我目前想到一种,经过测试也好使:
SELECT * FROM (select * from tab where userId = 2 limit 6 union select * from tab where userId = 3 limit 6 union select * from tab where userId = 4 limit 6) as t limit 6
在贴一个方法:
SELECT * FROM tab where userId in(4,2,3) order by field(userId,4,2,3) limit 6
我觉得你可以做个后台程序按关键字把文章分类并把结果存在缓存里(跑的次数你可以拿你的需求定),用户从前台提交过来的关键字若你的关键词库没有可以添加进来,这样用户查询时从缓存里读就可以了。
对于你的这个需求,SQL语句没有办法一次性完成你想要的结果,首先这个问题需要说明一下,你这个需求是业务层面上逻辑,不能也不应该把它抛给数据库来处理,SQL语句最擅长的是处理简单的CUID,这样不仅能提高数据库的性能,也能使业务逻辑更清晰。像这样的需要在PHP的业务逻辑里实现起来应该很简单,但在SQL里就显得力不从心了,哪怕是在PHP里处理一下向MySQL多个查询也比一次性给MySQL处理来得高效。