mysql中的条件选择变量

时间:2012-07-17 18:50:46

标签: mysql sorting conditional

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

表格中的字段是:

分配: - ID - id_lead - date_assigned

导致: - ID - date_added

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

现在我想要的是,如果没有针对潜在客户的分配,我希望“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";

潜在客户可以有多个任务....我认为这是问题...但我无法弄清楚如何让它按我想要的方式排序。

我应该更改这些,以便我从作业表中选择而不是?但后来我遇到了问题,如何在同一个表中显示未分配的潜在客户,按日期_added / date_assigned排序?

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

更改此行:

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

第一行未按照您希望的方式排序的原因是因为IF的错误条件始终正在执行,因为NULL是未知值而不能 < em>等于 到任何东西,甚至不是自己。

您必须使用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)