Mysql查询不按顺序获取数据
我正在尝试使用左联接获取数据。我的表如下所示: 表1: ======================== id | name ======================== 1 | Amit ======================== 2 | Manzoor ======================== 3 | Atik ======================== 4 | Sharif 如果今天的日期与上面的表2的日期匹配,我需要下面的数据 id | name | t2_id | date | table1_id | status ====================================================================== 1 | Amit | 1 | 2014-03-03 | 1 | 1 ====================================================================== 2 | Manzoor | 2 | 2014-03-04 | 2 | 1 ====================================================================== 3 | Atik | 3 | 2014-03-05 | 3 | 1 ====================================================================== 4 | Sharif | NULL | NULL | NULL | NULL 有什么想法吗?如果您想按所示排序,应该按id排序。如果希望按id排序,然后按状态排序,则可以按多列排序:按id排序,按状态排序 如果您想按日期排序,但将空值放在底部,那么:ORDER by date为空,date试试这个Mysql查询不按顺序获取数据,mysql,Mysql,我正在尝试使用左联接获取数据。我的表如下所示: 表1: ======================== id | name ======================== 1 | Amit ======================== 2 | Manzoor ======================== 3 | Atik ======================== 4 | Shar
ORDER BY status IS NULL, status DESC
此语句状态为NULL将返回1表示true,0表示false,因此按升序排序将使其在列表中首先成为非NULL。尝试以下操作:
SELECT * FROM
(SELECT * FROM table1 t1 LEFT JOIN
table2 t2 ON t1.id=t2.table1_id
WHERE t2.Date IS NOT NULL
AND t2.Date = curdate()
ORDER BY t2.status DESC) T1
UNION ALL
SELECT * FROM
(SELECT *
FROM table1 t1 LEFT JOIN
table2 t2 ON t1.id=t2.table1_id
WHERE t2.Date IS NOT NULL
AND t2.Date <> curdate()
ORDER BY t2.Date ASC, t2.status DESC) T
UNION ALL
SELECT *
FROM table1 t1 LEFT JOIN
table2 t2 ON t1.id=t2.table1_id
WHERE t2.Date IS NULL
说明:
如果日期字段不为空且当前日期按状态顺序排列,则选择所有记录
如果日期字段不为空且不是按日期顺序排列的当前日期,则与记录合并
与日期字段为空的记录的联合
请参见中的结果。类似于下面的内容?老兄,你连话都说不出来吗?你的提问好像有错。你的意思是……在t1.id=t2.table1\u id订单由。。。?你提到了t1.table1_id,但实际上是t2.table1_id。你想选择日期<今天的日期吗?不,我想选择所有内容,但我想像上面那样查看我的结果。如果你的日期像-2014-03-052014-03-062014-03-02,我需要显示是否按-2014-03-022014-03-052014-03-06这样的顺序排列记录?按日期?按身份?或者什么?如果我按id排序,状态为未显示空值的正确结果您的意思是空值以错误的顺序显示吗?或者它们根本不显示?空值显示错误的顺序。如果我放置Desc order,空值首先显示在表中谢谢,我正在尝试!谢谢你的回答,我想它会对我有用的。我现在就试试,然后我会记下这个answer@CrazyMan:当然可以,我的朋友。如果您需要对结果进行进一步修改,请告诉我。它可以工作,但我需要通过一个条件显示它。如果日期与当前日期匹配,它将首先显示。我如何才能做到这一点?这是我的新提琴链接。您将看到前两行。命名为阿米特,阿提克。我需要先显示阿提克,因为今天是2014-03-04。我希望您能理解。@CrazyMan:看到了。更改了第二个查询中的order by子句。
ORDER BY status IS NULL, status DESC
SELECT * FROM
(SELECT * FROM table1 t1 LEFT JOIN
table2 t2 ON t1.id=t2.table1_id
WHERE t2.Date IS NOT NULL
AND t2.Date = curdate()
ORDER BY t2.status DESC) T1
UNION ALL
SELECT * FROM
(SELECT *
FROM table1 t1 LEFT JOIN
table2 t2 ON t1.id=t2.table1_id
WHERE t2.Date IS NOT NULL
AND t2.Date <> curdate()
ORDER BY t2.Date ASC, t2.status DESC) T
UNION ALL
SELECT *
FROM table1 t1 LEFT JOIN
table2 t2 ON t1.id=t2.table1_id
WHERE t2.Date IS NULL