我有一个应用程序,可以搜索并显示不同机构的用户推荐。
每个机构都可以提供任意数量的建议。
每个研究所的结果如下:
我想一次只抽取10个机构。
问题在于我的查询是指推荐,而不是机构,因此我最终得到了10条建议,而不是10个机构。
有没有办法告诉MySQL这个限制是指DISTINCT机构,同时仍然有效拉丁机构(即同一机构的一些建议)?
实际查询的简化版本:
SELECT * FROM institutions
LEFT JOIN recommendations
ON institutions.InstitutionID = recommendations.InstitutionID
WHERE [SOMETHING]
LIMIT 10
提出问题的另一种方式:是否可以使LIMIT子句引用没有JOIN的原始SELECT?
答案 0 :(得分:3)
限制机构,然后加入:
SELECT * FROM (
select *
from institutions
WHERE [SOMETHING about institutions]
LIMIT 10) x
LEFT JOIN recommendations ON x.InstitutionID = recommendations.InstitutionID
AND [SOMETHING about recommendations]
对于mysql中的分页,请使用:
...
LIMIT 50, 10
此示例获取第6页 - 从第51行开始并获得10行
注意:偏移量来自0
而不是1
。
mysql中的syntax for limit是LIMIT offset, row_count
。没有偏移,它是LIMIT row_count
(我知道...... row_count参数会移动!)
您还可以使用替代语法:
...
LIMIT 10 OFFSET 50
我发现后一种语法更容易阅读。
答案 1 :(得分:1)
当您加入时,向机构提出子查询并将限制放在那里
SELECT *
FROM nsrecommendation
JOIN (select * from nsserviceplace limit 10) as ten_service_places
WHERE ten_service_places.NSServicePlaceID = nsrecommendation.NSServicePlaceID
AND [something];
答案 2 :(得分:0)
如果您只想使用mysql查询作为检索数据的方式,您可以尝试一些嵌套查询来获取所需的数据。没有表结构就说不出多少。