gpt4 book ai didi

php - 如何根据优先顺序从 MySQL 中选择时间?

转载 作者:行者123 更新时间:2023-11-29 02:07:27 25 4
gpt4 key购买 nike

我知道这个问题没有多大意义,但这里是:

乘法表

Authority           | Time
-------------------------------------
animuson@forums | 45.6758
132075829385895 | 49.7869
qykumsoy@forums | 44.45
439854390263565 | 50.761
user@forums | 44.9
another@auth | 46.123
bingo@nameo | 47.4392

所以让我解释一下。默认情况下,如果您没有将您的帐户与您使用的权限关联,它只会存储时间作为权限,但如果您关联了您的帐户,它会存储您的身份证号码。我希望有 ID 号的人有优先权,这样他们就会出现在没有链接但仍按顺序排列的人之前。因此,对于此数据示例,选择前5个时,它将输出这些结果:

Authority           | Time
-------------------------------------
qykumsoy@forums | 44.45
user@forums | 44.9
animuson@forums | 45.6758
132075829385895 | 49.7869
439854390263565 | 50.761
-------------------------------------
Ignoring These:
another@auth | 46.123
bingo@nameo | 47.4392

即使这两个用户有更好的时间,但他们因为没有链接而被淘汰,链接的帐户被推高,但前 5 名仍然按照他们的时间顺序排列。可以安全地假设管理局中出现的“@”符号意味着它是一个未链接的帐户。它将始终出现在未链接的授权值中,而链接的帐户将始终是纯数字。关于如何在一个查询中执行此操作的任何想法?

我使用的当前查询不假思索地简单地选择了前 5 个:

SELECT * FROM `tronner_times` WHERE `mid` = '{$map['mid']}' ORDER BY `time` + 0 LIMIT 5

最佳答案

这是第一个想到的解决方案。我不确定它是否可以进一步优化,但您可能想尝试以下操作:

SELECT    dt.authority, dt.time 
FROM (
SELECT authority, time
FROM tronner_times
ORDER BY INSTR(authority, '@') > 0, time
LIMIT 5
) dt
ORDER BY dt.time;

测试用例:

CREATE TABLE tronner_times (authority varchar(90), time decimal(8, 4));

INSERT INTO tronner_times VALUES ('animuson@forums', 45.6758);
INSERT INTO tronner_times VALUES ('132075829385895', 49.7869);
INSERT INTO tronner_times VALUES ('qykumsoy@forums', 44.45);
INSERT INTO tronner_times VALUES ('439854390263565', 50.761);
INSERT INTO tronner_times VALUES ('user@forums', 44.9);
INSERT INTO tronner_times VALUES ('another@auth', 46.123);
INSERT INTO tronner_times VALUES ('bingo@nameo ', 47.4392);

结果:

+-----------------+---------+
| authority | time |
+-----------------+---------+
| user@forums | 44.9000 |
| another@auth | 46.1230 |
| bingo@nameo | 47.4392 |
| 132075829385895 | 49.7869 |
| 439854390263565 | 50.7610 |
+-----------------+---------+
5 rows in set (0.00 sec)

我们进行了两次排序,因为派生表返回的行在最顶部没有 @ 符号。如果 @ 出现在 authority 中,表达式 INSTR(authority, '@') > 0 返回 1字符串,如果不是,则为 0。因此,结果集首先按此表达式排序,然后按 time 字段排序,为没有 @ 的行提供优先级(因为 0 是排序在 1 之前)。因此,我们通过 time 字段对派生表中的 5 行进行排序,以产生预期的最终结果。

关于php - 如何根据优先顺序从 MySQL 中选择时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3436278/

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