如何条件排序结果为 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>