基本上我要做的是将行的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
答案 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子句。因此,它应该被视为一种建议,而不是一个完整的解决方案。