通过除行数以外的参数设置LIMIT

时间:2012-11-04 17:57:16

标签: mysql

我有一个应用程序,可以搜索并显示不同机构的用户推荐。

每个机构都可以提供任意数量的建议。

每个研究所的结果如下:

  • Inst A有6条建议
  • inst B有4条建议
  • 等......

我想一次只抽取10个机构

问题在于我的查询是指推荐,而不是机构,因此我最终得到了10条建议,而不是10个机构。

有没有办法告诉MySQL这个限制是指DISTINCT机构,同时仍然有效拉丁机构(即同一机构的一些建议)?

实际查询的简化版本:

SELECT * FROM institutions
LEFT JOIN recommendations
  ON institutions.InstitutionID = recommendations.InstitutionID
WHERE [SOMETHING]
LIMIT 10

提出问题的另一种方式:是否可以使LIMIT子句引用没有JOIN的原始SELECT?

3 个答案:

答案 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 limitLIMIT 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查询作为检索数据的方式,您可以尝试一些嵌套查询来获取所需的数据。没有表结构就说不出多少。