gpt4 book ai didi

mysql order 在两个表上有很多条件

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

我试图根据一些不同的标准对访问者列表进行排序,但卡住了,因为我不知道该怎么做。

我有一个先签到的人队列,然后生成列表。客户被标记为 showedUp,如果他来到门口(在用列表中的号码调用之后)。如果有人迟到,他一定排在名单的末尾。另一件事是,列表每次都以不同的数字开始。

Day 1 -> List from 1 to 160
Day 2 -> List from 33 to 160, 1 to 32
Day 3 -> List from 65 to 160, 1 to 64

如果有人迟到,意味着他后面的号码已经被叫到,他应该被添加到列表的末尾,比如 1 到 160,10 迟到了,因为 20 已经被叫到,应该是 1 到 160, 10. 如果有另一个起始号码,它应该是 33 到 160、1 到 32、10。这里的标准是:如果您的号码后面的 placeNr 已经被调用(显示上),那么您就在列表的末尾。

表格

clients (id, name, placeNr)
visits (id, pid, checkInTime, showedUp, showedUpTime)

选择

SELECT clients.id AS id, visits.id AS visitId, clients.placeNr AS placeNr, clients.name AS name 
FROM clients, visits
WHERE clients.id = visits.pid AND visits.checkInTime >= '1447286401' AND visits.checkInTime <= '1447372799'
ORDER BY clients.placeNr < '1', if(visits.showedUpTime < visits.checkInTime, clients.placeNr, 1), ttc.placeNr

那么我怎样才能在我的列表末尾得到晚阵雨呢?非常感谢您!

最佳答案

如果我按照你的逻辑,你需要指定是否有人迟到。以下是此类查询所需的结构。我想我已经掌握了您问题中的规则:

select v.id, v.id AS visitId, c.placeNr, c.name,
(case when v.showedUpTime >
(select min(v.checkInTime)
from visits v2 join
clients c2
on v2.pid = c2.id
where date(v2.showedUpTime) = date(v.showedUpTime) and
c2.placeNr > c.placeNr
)
then 1 else 0 end) as IsLate
from clients c join
visits v
on c.id = v.pid
order by date(v.showedUpTime),
isLate,
c.placeNr;

关于mysql order 在两个表上有很多条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33779721/

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