MySQL LIMIT 1但查询15行?

时间:2012-06-04 22:22:52

标签: php mysql limit

基本上我要做的是将行的ID与MySQL中的15个结果进行比较,除了1之外的所有结果(使用NOT IN)然后拉出结果。

现在通常情况下这本身就没问题,但是我正在进行SQL查询的15行的顺序会根据排名不断变化,因此有可能在排名更新的时间和ajax请求(我提交NOT IN的ID)不仅仅有一个ID已经改变,这当然会带回多行我不想要的。

简而言之,有没有一种方法可以查询15行,但只返回一行?无需运行两个单独的查询。感谢任何帮助,谢谢。

实施例

假设我的数据库中有7个项目,并且我在页面上向用户显示5个项目。

这些是向用户显示的内容:

Apple
Orange
Kiwi
Banana
Grape

但在数据库中我也有

Peach
Blackberry

现在我要做的是,如果用户从列表中删除某个项目,它会添加另一个项目(基于他们的排名)

现在的问题是,为了知道他们在列表中的内容,我将剩余的项目发送到数据库(比如他们删除了Kiwi,我会发送Apple,Orange,Banana和Grape)

所以现在我从剩下的六个项目中选择排名最高的5个项目,确保它们不是已经显示在页面上的项目,然后将新的项目添加到列表中(桃子或黑莓)

一切都很好,除非如果桃子和黑莓现在都超过葡萄,那么我将返回两个结果而不是一个。因为它会被查询......

Apple
Orange
Banana
Peach
Blackberry

并排除......

Apple
Orange
Banana
Grape

这让我们既有Peach又有Blackberry,而不仅仅是Peach或Blackberry

2 个答案:

答案 0 :(得分:1)

根据您要做的事情(最好看一个示例),可以使用嵌套查询来完成。见post explaining how

答案 1 :(得分:0)

我不确定我是否完全理解这些要求,但我会试一试。以下示例基于我的理解,并假设您只想显示顶部五个行。

SELECT
  UL.ItemName
FROM
  UserList UL
WHERE
  (UL.Deleted = 0) -- Take only items that are NOT deleted

UNION -- UNION clause discards duplicate entries, unlike UNION ALL

SELECT
  I.ItemName
FROM
  (SELECT
    IL.ItemName
  FROM
    ItemList IL -- This is the table containing ALL Items
  ORDER BY
    IL.Ranking ASC -- Most important Items first, supposing that a lower number in Ranking means higher priority
  ) AS I
LIMIT 5 -- Display only top five entries

注意:此查询未经测试,并且很有可能它不会始终以正确的顺序返回项目,因为它缺少ORDER BY子句。因此,它应该被视为一种建议,而不是一个完整的解决方案。

相关问题