Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
两个表上有许多标准的mysql顺序_Mysql_Sql Order By - Fatal编程技术网

两个表上有许多标准的mysql顺序

两个表上有许多标准的mysql顺序,mysql,sql-order-by,Mysql,Sql Order By,我正试图根据不同的标准对访客列表进行排序,但遇到了问题,因为我不知道该怎么做 我有一个先登记的人的队列,从中生成列表。如果客户来到门口(用列表上的号码拨打电话后),他会被标记为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 如果

我正试图根据不同的标准对访客列表进行排序,但遇到了问题,因为我不知道该怎么做

我有一个先登记的人的队列,从中生成列表。如果客户来到门口(用列表上的号码拨打电话后),他会被标记为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已经被调用(showedUp),那么您将位于列表的末尾

桌子

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
选择clients.id作为id,visits.id作为visitId,clients.placeNr作为placeNr,clients.name作为name
来自客户、访问

其中clients.id=visions.pid和visions.checkInTime>='1447286401'和visions.checkInTime如果我遵循您的逻辑,您需要指定是否有人迟到。以下是此类型查询所需的结构。我想我已经抓住了你问题中的规则:

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;

两个表中的示例数据和所需结果将有助于解释问题(或者更好地说是SQL FIDLE)。@Paddy
placeNr
-->在该字段中进行解释。。