时间:2021-07-01 10:21:17 帮助过:44人阅读
最近在优化美食网分类关系表与菜谱调用的数据库查询问题,原来使用笨方法:
SELECT `recipeid` FROM recipes_catship WHERE `catid`=1 LIMIT 0,30
先查询出来菜谱的ID,跑 while后,在循环里再根据菜谱ID查询详细信息。这样光菜谱都需要查询30次,不符合我要的风格。
想到使用 id IN(id1,id2,id3)的方式,节约数据库查询。
select * from recipes where id in (SELECT id from recipes_catship limit 0,30);
然后就报错了:
[SQL]select * from recipes where id in (SELECT id from recipes_catship limit 0,30);
[Err] 1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
这个版本的MYSQL不支持LIMIT与IN等东东同时使用云云。。。
然后搜索了一下,可以使用以下语句替换一下就可以完美支持LINMIT了:
select * from recipes where id in (SELECT ii.id from (SELECT id from recipes_catship limit 0,30) as ii);
这里只需要多嵌套一层SELECT,在最里面的嵌套里可以写上各类条件与排序。3层SELECT查询嵌套,并不会太影响速度,至少我测试出来速度是相当满意的!