1

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

每个机构可以有任意数量的推荐。

每个研究所的结果如下所示:

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

我想一次只画十个机构

问题是我的查询是针对建议,而不是机构,因此我最终得到 10 个建议而不是 10 个机构。

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

实际查询的简化版本:

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

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

4

3 回答 3

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 行。
注意:偏移量从0not开始计算1

mysql 中限制的语法LIMIT offset, row_count是. 没有偏移,它是LIMIT row_count(我知道...... row_count 参数移动!)

您还可以使用替代语法:

...
LIMIT 10 OFFSET 50

我发现后一种语法更容易阅读。

于 2012-11-04T18:08:38.120 回答
1

当您加入时,对机构进行子查询并将限制放在那里

SELECT * 
  FROM nsrecommendation
  JOIN (select * from nsserviceplace limit 10) as ten_service_places
 WHERE ten_service_places.NSServicePlaceID = nsrecommendation.NSServicePlaceID 
   AND [something];
于 2012-11-04T18:06:23.120 回答
0

如果您只想使用 mysql 查询作为检索数据的方式,您可以尝试一些嵌套查询来获取所需的数据。没有表结构就不能说太多。

于 2012-11-04T18:02:16.700 回答