gpt4 book ai didi

mysql获取按多列排序的下一行

转载 作者:搜寻专家 更新时间:2023-10-30 20:53:02 24 4
gpt4 key购买 nike

我有一个包含产品的数据库。当我选择一个产品时,我想在我的数据库中获取下一个产品。

例如:我有 ID 为 188 的产品,我想获得 ID 为 167 的下一个产品。

数据库:

SELECT * FROM product ORDER BY title ASC, description ASC
+----+----------------------+----------------------+
| id | title | description |
+----+----------------------+----------------------+
|111 | Adjusterhouse | Finetuning |
+----+----------------------+----------------------+
|188 | Adjustment housing | Height |
+----+----------------------+----------------------+
|167 | Adjustment housing | Oilpressure |
+----+----------------------+----------------------+
|105 | Adjustment housing | Suspension |
+----+----------------------+----------------------+
|102 | Adjustment nut L+R. | Packaging machinery |
+----+----------------------+----------------------+

但如果我使用以下 SQL 语句,我将获得 ID 为 102 而不是 167 的产品。

SELECT * FROM product 
WHERE title > ? AND (title > ? OR description > ?)
ORDER BY title ASC, description ASC LIMIT 1

有人可以帮我处理这个 SQL 语句吗?

最佳答案

您的方法是正确的。只需要一个小的更改,将第一个比较更改为“大于 或等于”,而不仅仅是“大于” ”。

只要 (title,description) 元组是唯一的,就可以正常工作。这是您想要的模式:

WHERE ( title >= ? )
AND ( title > ? OR description > ? )

(唯一的变化是您需要将“title>=”比较作为 WHERE 中的第一个条件。您拥有的其他一切都很好。


如果不能保证(title,description)元组是唯一的...

我们需要在排序中添加额外的列。 id 列看起来是一个理想的候选者。这变得有点复杂,但模式是相似的......

WHERE ( title >= ? )
AND ( title > ? OR
(

( description >= ? )
AND ( description > ? OR id > ? )

)
)

ORDER BY title ASC, description ASC, id ASC

请注意,我们嵌套了相同的模式;用于descriptionid 的模式与我们用于titledescription 的相同。

外部仍然是相同的模式,但现在它位于 title 而不是普通的 description,我们得到了适用于 的条件>(description,id) 元组。

关于mysql获取按多列排序的下一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35072041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com