Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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 - Fatal编程技术网

Mysql查询不按顺序获取数据

Mysql查询不按顺序获取数据,mysql,Mysql,我正在尝试使用左联接获取数据。我的表如下所示: 表1: ======================== id | name ======================== 1 | Amit ======================== 2 | Manzoor ======================== 3 | Atik ======================== 4 | Shar

我正在尝试使用左联接获取数据。我的表如下所示:

表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

试试这个

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