2012-07-17 120 views
0

我正在嘗試編寫一個SQL查詢,它將基於日期(數據庫中的INTEGER)進行排序,該日期可能位於兩個表中的一個或兩個表中。mysql中的條件選擇變量

表,這是在問候中的字段有:

分配: - 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_added/date_assigned排序的同一個表中未分配的線索?

任何幫助將是可怕的。

+0

'ORDER BY CASE WHEN a.ID爲null,則l.date_added ELSE一個。 date_assigned END desc' – 2012-07-17 18:55:32

回答

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

請閱讀我的answer至此question以獲取有關NULL值的更多信息。


編輯:如果你想成爲更簡潔,你可以這樣做:

COALESCE(a.date_assigned, l.date_added) 

COALESCE()函數將返回第一個非NULL說法。

如果您有沒有必要顯示date_sort的價值,你甚至可以把它直入ORDER BY條款:

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

您的第一個答案'COALESCE(a.date_assigned,l.date_added)'應該可以工作,我的猜測是如果'a.id爲空''a.date assigned'也爲空,我們不必檢查if 'a.id is null' – 2012-07-17 19:00:54

+0

@rs。是的,這是我更喜歡的方式,但我改變了它,因爲它更清楚的OP只是**爲什麼**它不工作。 – 2012-07-17 19:02:10