2012-10-22 52 views
1

我有一個表activity_types,其中包含活動的文本,例如
New project has been assigned to {user} with name {project}
New discussion has been posted by {client} on {project}
Project {project} has been closed by {user}
A draft has been approved by {client} on {project}
Mysql替換函數返回null

我對這些文本的ID已被填充另一個表。

現在,我的要求是內{}與像{}客戶應與客戶名稱所取代他們的實際值,(項目)應與項目名稱替換替換文本來獲取這些。

我已經使用嵌套取代MySQL的函數嘗試,但它返回空字符串。這裏是我的查詢

SELECT  REPLACE(REPLACE(REPLACE(att.type_text, '{project}', p.project_business_name), '{user}', u.user_fullname), '{client}', c.client_name) AS activity, a.* 
FROM  activities a 
LEFT JOIN activity_types AS att ON att.type_id = a.activity_type 
LEFT JOIN users u ON u.user_id = a.activity_user AND a.activity_user IS NOT NULL 
LEFT JOIN projects p ON p.project_id = a.activity_project AND p.project_is_removed = '0' 
LEFT JOIN clients c ON c.client_id = a.activity_client AND a.activity_client IS NOT NULL; 

的問題是,如果我取代靜態文本的c.client_name它工作正常,但是當我更換c.client_name靜態字符串時,它在沒有活動{客戶端返回null }。任何猜測我在哪裏做錯了?

回答

1

嘗試在列

...,COALESCE(c.client_name, ''), 

基本上如果列(c.client_name)是加入COALESCE,它會隨着空字符串替換

會發生什麼情況是,當部分字符串替換爲null時,整個字符串變爲null

+0

完美...日Thnx :) –

+1

歡迎您@ShayanHusaini! –

1

SQL null是會傳染的。一旦你在某處得到一個空值並在函數和派生值中使用該空值,整個結果就會變爲空。因此,如果REPLACE()鏈中的任何字段爲空,則整個結果將變爲null。您可以嘗試類似於

COALESCE(name_of_field, '') 
or 
IFNULL(name_of_field, '') 

將這些空值轉換爲空字符串。