如何条件排序结果为 mySql?
How to conditional order results in mySql?
我有这个场景:
用户进入我的应用程序并按下按钮以在游戏中寻找一对。当他单击该按钮时,我在 table 中插入了他的 ID、他的级别、他的国家/地区 ID 和带有 NOW() 的日期时间。
那我得看看这个table,想找一对陪他玩
我的问题是,我需要根据用户级别对结果进行排序。
所以,想象一下我的 table 有这些行:
|ID |userID|userLv| date_add | country_ID |
----------------------------------------------------
| 1 | 1 |3 |2016-06-24 12:09:06 | 5 |
| 2 | 2 |2 |2016-06-24 04:26:24 | 8 |
| 3 | 3 |2 |2016-06-24 11:38:54 | 1 |
| 4 | 4 |1 |2016-06-24 11:10:06 | 9 |
| 5 | 5 |2 |2016-06-24 11:35:49 | 6 |
| 6 | 6 |1 |2016-06-24 20:09:13 | 10 |
如果一个级别为1的用户点击按钮,他需要与另一个级别为1的用户匹配,由date_add ASC排序。但是如果没有级别 1 的用户可用,他将与级别 2 的用户配对,再次按 date_add ASC 排序。如果没有可用的 2 级用户,他将与 3 级用户配对。
基本上,我需要一个脚本,它可以 return userLv = x 首先排序的行,然后是其他级别。如何仅通过对数据库的一个请求来做到这一点?这有意义吗?
您一次可以使用 1 个 sql 命令。检查是否有相同级别的查询 returns 并重复几秒钟。然后,如果没有结果,请同时检查下一个 sql 语句,依此类推。
您可以简单地使用带有 LIMIT
的相关查询来获取第二个用户 ID:
SELECT t.*,
(SELECT s.userID FROM YourTable s
WHERE s.userLv >= t.userLv
ORDER BY s.userLv
LIMIT 1) as user2_id
FROM YourTable t
WHERE t.userID = <YourParamOrWhatEver>
我有这个场景:
用户进入我的应用程序并按下按钮以在游戏中寻找一对。当他单击该按钮时,我在 table 中插入了他的 ID、他的级别、他的国家/地区 ID 和带有 NOW() 的日期时间。
那我得看看这个table,想找一对陪他玩
我的问题是,我需要根据用户级别对结果进行排序。
所以,想象一下我的 table 有这些行:
|ID |userID|userLv| date_add | country_ID | ---------------------------------------------------- | 1 | 1 |3 |2016-06-24 12:09:06 | 5 | | 2 | 2 |2 |2016-06-24 04:26:24 | 8 | | 3 | 3 |2 |2016-06-24 11:38:54 | 1 | | 4 | 4 |1 |2016-06-24 11:10:06 | 9 | | 5 | 5 |2 |2016-06-24 11:35:49 | 6 | | 6 | 6 |1 |2016-06-24 20:09:13 | 10 |
如果一个级别为1的用户点击按钮,他需要与另一个级别为1的用户匹配,由date_add ASC排序。但是如果没有级别 1 的用户可用,他将与级别 2 的用户配对,再次按 date_add ASC 排序。如果没有可用的 2 级用户,他将与 3 级用户配对。
基本上,我需要一个脚本,它可以 return userLv = x 首先排序的行,然后是其他级别。如何仅通过对数据库的一个请求来做到这一点?这有意义吗?
您一次可以使用 1 个 sql 命令。检查是否有相同级别的查询 returns 并重复几秒钟。然后,如果没有结果,请同时检查下一个 sql 语句,依此类推。
您可以简单地使用带有 LIMIT
的相关查询来获取第二个用户 ID:
SELECT t.*,
(SELECT s.userID FROM YourTable s
WHERE s.userLv >= t.userLv
ORDER BY s.userLv
LIMIT 1) as user2_id
FROM YourTable t
WHERE t.userID = <YourParamOrWhatEver>