1

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

现在通常这本身就可以了,但是我正在执行 SQL 查询的 15 行的顺序会根据排名不断变化,因此在排名更新和 ajax 请求之间有可能(我提交的 ID 为NOT IN)不止一个 ID 发生了变化,这当然会带回不止一行我不想要的。

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

例子

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

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

Apple
Orange
Kiwi
Banana
Grape

但在数据库中我也有

Peach
Blackberry

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

现在的问题是,为了知道他们现在的清单上有什么,我将剩余的项目发送到数据库(假设他们删除了 Kiwi,我会发送 Apple、Orange、Banana 和 Grape)

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

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

Apple
Orange
Banana
Peach
Blackberry

并排除...

Apple
Orange
Banana
Grape

这给我们留下了桃子和黑莓,而不仅仅是桃子或黑莓。

4

2 回答 2

1

根据您要执行的操作(最好看一个示例),它可以通过嵌套查询来完成。看这篇文章解释如何

于 2012-06-04T22:26:39.223 回答
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 子句。因此,它应该被视为一个建议,而不是一个完整的解决方案。

于 2012-06-04T23:16:54.597 回答