mysql - mysql中的条件选择变量

标签 mysql sorting conditional-statements

我正在尝试编写一个 SQL 查询,该查询将根据日期(数据库中的整数)进行排序,该日期可能位于两个表中的一个或两个表中。

与此相关的表中的字段是:

作业: - ID - id_lead - 分配日期

线索: - ID - 添加日期

这些表还有其他字段,但它们不适用于此问题。

现在我想要的是,如果没有对潜在客户进行分配,我希望“date_sort”变量成为潜在客户的 date_added 值。如果有潜在客户的分配,我希望它是该分配的 date_assigned 值。

我的问题是,使用我的查询不会显示任何在我的结果列表中没有分配的潜在客户。

这是我正在处理的查询:

$pagi_sql = "select 
             l.id, l.id_infusionsoft, l.name_first, l.name_last, l.postcode, a.website as a_website, l.website as l_website, l.date_added,
             a.id_dealership, a.id_lead, a.id as id_assign, a.date_assigned,
             d.name as dealership,
             if(a.id = null, l.date_added, a.date_assigned) as date_sort
             from `leads` as l
             left join `assignments` as a on (a.id_lead = l.id)
             left join `dealerships` as d on (d.id = a.id_dealership)
             $where
             order by date_sort desc";

这是我原来的查询,它有效,但没有按照我想要的方式排序:

$pagi_sql = "select 
             l.id, l.id_infusionsoft, l.name_first, l.name_last, l.postcode, a.website as a_website, l.website as l_website, l.date_added,
             a.id_dealership, a.id_lead, a.id as id_assign, a.date_assigned,
             d.name as dealership
             from `leads` as l
             left join `assignments` as a on (a.id_lead = l.id)
             left join `dealerships` as d on (d.id = a.id_dealership)
             $where
             order by l.date_added desc";

潜在客户可以有多个任务......我认为这就是问题......但我不知道如何让它按照我想要的方式排序。

我应该更改这些,以便我从分配表中选择吗?但后来我遇到了问题,如何在同一个表中显示按日期添加/日期分配排序的未分配线索?

任何帮助都会很棒。

最佳答案

更改此行:

if(a.id = null, l.date_added, a.date_assigned) AS date_sort

对此:

if(a.id IS NULL, l.date_added, a.date_assigned) AS date_sort

第一行没有按照您希望的方式排序的原因是因为 NULL 是一个未知值,所以始终执行 IF 的错误条件并且不能等于任何东西,甚至不能等于它本身。

您必须使用 IS NULL 而不是 = NULL

阅读我的answer对此question了解有关 NULL 值的更多信息。

<小时/>

编辑:如果你想更简洁,你可以这样做:

COALESCE(a.date_assigned, l.date_added)

Th COALESCE()函数将返回第一个非NULL参数。

如果不需要显示date_sort的值,甚至可以直接将其放入ORDER BY子句中:

ORDER BY COALESCE(a.date_assigned, l.date_added)

关于mysql - mysql中的条件选择变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11528952/

相关文章:

php - MySQL - 获取层次结构中的顶级父 ID

c - 归并排序错误C

PHP:条件格式 - (6 == $var) 或 ($var == 6)?

ruby - 使用 ruby​​ 的 'case'/'when' 方法与 ||或 && 运算符等

mysql - 在 SQL 中有效地加入间隔范围

java - 使用 JDBC 时出现 MissingResourceException?

php - 错误 fatal error : Call to a member function insert() on a non-object

php - 我如何对每个房间和工作日的一系列客人进行排序

c++ - 根据另一个 vector 对点 vector 进行排序

R:按值选择行并始终包含上一行