0

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

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

分配: - 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";

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

我应该改变这些,以便我从分配表中选择吗?但后来我遇到了问题,如何在按 date_add/date_assigned 排序的同一张表中显示未分配的潜在客户?

任何帮助都是极好的。

4

1 回答 1

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它是一个未知值并且不能等于任何东西,甚至不等于它本身。

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

阅读我对这个问题的回答,以更深入地了解价值观。NULL


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

COALESCE(a.date_assigned, l.date_added)

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

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

ORDER BY COALESCE(a.date_assigned, l.date_added)
于 2012-07-17T18:56:39.047 回答