2014-09-24 88 views
0

我想寫一個MYSQL查詢獲取標題,url_title,類別,並且還設置了一個基於類別值的值的URL字段。與IF條件的MySQL查詢

我需要做的是檢查管道分離的類別列(例如:10 | 122 | 40 | 187),並將url列的值設置爲http://www.mydomain.tld並添加url_title,如果類別列包含類別10 ,如果列中沒有這些類別,則返回40,80,然後將url設置爲http://www.mydomain2.tld並添加url_title。

我試圖使用下面的條件,但我顯然做錯了;

SELECT exp_channel_data.entry_id AS entry_id, exp_channel_titles.title AS title, exp_channel_titles.url_title AS url_title, GROUP_CONCAT(cp.cat_id SEPARATOR '|') AS categories, 
    IF('122,123,124,125,126,127,128,129,130,131,132,187' IN categories, 
    (CONCAT('http://www.mydomain.tld',url_title AS 'URL')), 
    (CONCAT('http://www.mydomain2.tld',url_title AS 'URL')) 
) 
FROM data 
FROM exp_channel_data 
LEFT JOIN exp_channel_titles ON exp_channel_titles.entry_id = exp_channel_data.entry_id 
LEFT JOIN exp_category_posts AS cp ON exp_channel_data.entry_id = cp.entry_id 

這裏是表結構;

exp_channel_data 
------------- 
entry_id int 10 

exp_channel_titles 
------------- 
entry_id int 10 
title varchar 100 
url_title varchar 100 

exp_category_posts [this is the junction table that has been referred to] 
------------- 
entry_id int 10 
cat_id int 10 

我將不勝感激任何意見。

更新:我已更新查詢,我正在使用。我試圖簡化這個問題,但意識到這是一個基準。我還包括了上面的表格結構。

+1

您不應該在列中存儲分隔列表。關係數據庫有一個偉大的數據類型來存儲列表。在這種情況下,它被稱爲表格,特別是結點表格。 – 2014-09-24 11:03:05

+0

該死的,我粘貼了錯誤的網址。我的意思是:可能重複[如何匹配逗號分隔的字符串,而不考慮它們在Mysql中的位置順序](http://stackoverflow.com/questions/25887713/how-can-match-a-string-of-comma - 分隔-不論-的-其位階/ 25887934#25887934)。 – GolezTrol 2014-09-24 11:06:55

+0

對不起,我應該補充說,這些類別不是以管道分隔的方式存儲的。我已將它們連接到查詢中的一個字段中。 – doubleplusgood 2014-09-24 11:08:10

回答

0

因爲你有一個糟糕的數據結構,你有一個相當強力的方法來做到這一點:

select title, url_title, categories, 
     (case when find_in_set(122, replace(categories, '|', ',')) > 0 or 
        find_in_set(123, replace(categories, '|', ',')) > 0 or 
        . . . 
        find_in_set(187, replace(categories, '|', ',')) > 0 
      then CONCAT('http://www.mydomain.tld', url_title AS 'URL') 
      else CONCAT('http://www.mydomain2.tld', url_title AS 'URL') 
     end) 
FROM data; 

你應該存儲類別結合表,每個類別和實體一行。