Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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 SQL:在联接表查询之后,首先将包含数据a的行放在两个表中_Mysql_Join - Fatal编程技术网

Mysql SQL:在联接表查询之后,首先将包含数据a的行放在两个表中

Mysql SQL:在联接表查询之后,首先将包含数据a的行放在两个表中,mysql,join,Mysql,Join,有1001种使用MySQL的可能性,我为自己提出了一个要求,我想弄清楚,但不知道怎么做。当然,我也运行了谷歌搜索,检查了堆栈溢出和MySQL文档,但我没有得到我想要的答案 情况: 我有两张桌子。一个呼叫并包含客户,另一个包含客户进度。对于您的图像处理,customer\u progress表可以选择性地包含有关客户进度/状态的数据 我的目标是将两个表中的数据连接起来,并将有进度数据的客户放在最前面,然后是没有进度数据的客户;多功能查询 因此,我开始编写一个查询,非常类似于以下内容: SELECT

有1001种使用MySQL的可能性,我为自己提出了一个要求,我想弄清楚,但不知道怎么做。当然,我也运行了谷歌搜索,检查了堆栈溢出和MySQL文档,但我没有得到我想要的答案

情况: 我有两张桌子。一个呼叫并包含客户,另一个包含客户进度。对于您的图像处理,customer\u progress表可以选择性地包含有关客户进度/状态的数据

我的目标是将两个表中的数据连接起来,并将有进度数据的客户放在最前面,然后是没有进度数据的客户;多功能查询

因此,我开始编写一个查询,非常类似于以下内容:

SELECT 
 * 
FROM 
 customers AS c 
LEFT JOIN 
 customer_progress AS p 
ON 
 p.customer_id = c.id AND p.year = 2011 // Joining them and selecting the progress for a certain year.
WHERE 
 c.active = 1;
我怎样才能先把有进度记录的客户放在第一位,然后再把没有进度记录的所有客户放在第二位


我不知道我的查询方式是否正确,或者我需要从一个完全不同的角度来处理这个问题。使用订单是没有意义的

您需要选择一个可以根据其订购的客户进度字段,以便添加如下内容

按客户的订单\进度\字段说明

在select语句的末尾

例如:

SELECT 
 c.filed1, p.field1 
FROM 
 customers AS c 
LEFT JOIN 
 customer_progress AS p 
ON 
 p.customer_id = c.id AND p.year = 2011 // Joining them and selecting the progress for a certain year.
WHERE 
 c.active = 1;
Order by p.field1 desc;

您需要选择一个可以订购的客户进度\字段,以便添加如下内容

按客户的订单\进度\字段说明

在select语句的末尾

例如:

SELECT 
 c.filed1, p.field1 
FROM 
 customers AS c 
LEFT JOIN 
 customer_progress AS p 
ON 
 p.customer_id = c.id AND p.year = 2011 // Joining them and selecting the progress for a certain year.
WHERE 
 c.active = 1;
Order by p.field1 desc;

您需要添加以下内容

ORDER BY IF(p.customer_id IS NULL,1,0), [other fields]
// or you can do just if sorting by customer_id is acceptable 
ORDER BY p.customer_id DESC

您可以在

上查看关于
ORDER by
如何处理值为
NULL的列的更多详细信息。您需要添加以下内容

ORDER BY IF(p.customer_id IS NULL,1,0), [other fields]
// or you can do just if sorting by customer_id is acceptable 
ORDER BY p.customer_id DESC

您可以查看更多关于
NULL
值的列如何被
ORDER by
处理的详细信息,这是我尝试过的(请参阅我问题中的最后一句),但结果并没有达到预期效果。@Sander:我看不到您从customer\u progress中选择了什么。*只选择了第一个表中的所有字段,而不是第二个表中的所有字段。非常正确,您在答案上击败了我。作为补充说明,这应该将porgress的空值记录放在底部。与asc订单相同。这当然是假设没有进展意味着该字段为空值,除非你做了一些奇怪的事情。你又让我走上了正确的轨道!非常感谢!正因为如此,我才喜欢堆栈溢出;)这就是我尝试过的(请看我问题的最后一句),但没有达到预期效果。@Sander:我看不出您从customer_progress中选择了什么。*只选择了第一个表中的所有字段,而不是第二个表中的所有字段。非常正确,您在答案上击败了我。作为补充说明,这应该将porgress的空值记录放在底部。与asc订单相同。这当然是假设没有进展意味着该字段为空值,除非你做了一些奇怪的事情。你又让我走上了正确的轨道!非常感谢!正因为如此,我才喜欢堆栈溢出;)德金泽的回答应该是有效的。如果没有考虑将SELECT语句更改为C*,P.*,以确保所有的内容都被选中。另外,查看和发布表的示例表数据也是一个好主意。尤其是查询中特别引用的所有字段。@Bryan:DKinzer确实是对的!:)我的错误是,我在写问题的时候太困惑了,以至于我忘记在我的实际代码中去掉一个“WHERE”条件,这个条件阻止了结果的显示。多亏了德金泽的例子,我又回到了正确的轨道上。我也修改了SELECT部分,所以我现在从两个表中选择了所有记录,而不仅仅是客户数据。如果没有考虑将SELECT语句更改为C*,P.*,以确保所有的内容都被选中。另外,查看和发布表的示例表数据也是一个好主意。尤其是查询中特别引用的所有字段。@Bryan:DKinzer确实是对的!:)我的错误是,我在写问题的时候太困惑了,以至于我忘记在我的实际代码中去掉一个“WHERE”条件,这个条件阻止了结果的显示。多亏了德金泽的例子,我又回到了正确的轨道上。我还修改了SELECT部分,以便现在从两个表中选择所有记录,而不仅仅是客户数据。