2014-05-20 76 views
-2

我有如下表結構:獲取兩列,如果條件的MySQL

cv1 cv2 cv_content1 cv_content2 
abc xyz  php,mysql  sql dotnet 
aaa xxx  java   php is my skill 

我有兩個關鍵字,可以說,PHP和DOTNET。現在我想從上面的表t1獲取記錄,其中前面提到的兩個關鍵字在列cv_content1和cv_content2中有OR條件。我想下面的記錄:

cv1 cv2 
abc xyz 
--- xxx 

我試圖case語句,如果還和我也有檢查多少關鍵字匹配例如,對於結果的第一行中的記錄是100%(PHP和DOTNET都是行),但第二行是50%(只有PHP匹配)。

我想下面的查詢到目前爲止:

SELECT ROUND(((if(LOCATE("php",cv_content1)>0,25,0) OR if(LOCATE("php",cv_content2)>0,25,0)) + if(LOCATE("dotnet",cv_content1)>0,25,0) OR if(LOCATE("dotnet",cv_content2)>0,25,0)) * 100)/50) as SkillTot,if (own_content regexp '[[:<:]]smith[[:>:]]',`own_filename`),if (kings_content regexp '[[:<:]]smith[[:>:]]' ,`kings_filename`) FROM `t1`WHERE (cv_content1 REGEXP '[[:<:]]php[[:>:]]' OR cv_content2 REGEXP '[[:<:]]php[[:>:]]' OR cv_content1 REGEXP '[[:<:]]dotnet[[:>:]]' OR cv_content2 REGEXP '[[:<:]]dotnet[[:>:]]') 

它有一個語法錯誤也。不明白如何使用if語句

+0

所以你試過? –

+0

您存儲關鍵字的方式很糟糕。您將面臨查詢數據的問題 – asprin

+0

cv_content1和cv_content2字符串是否存在?而所有的標籤只是逗號分隔的字符串?如果是這種情況,你應該改變你的數據庫佈局 – WizKid

回答

1
SELECT IF(FIND_IN_SET('php', cv_content1) OR FIND_IN_SET('dotnet', cv_content1), 
      cv1, NULL) AS cv1, 
     IF(FIND_IN_SET('php', cv_content2) OR FIND_IN_SET('dotnet', cv_content2), 
      cv2, NULL) AS cv2 
FROM YourTable 
HAVING cv1 IS NOT NULL OR cv2 IS NOT NULL 
+0

感謝您的回答:) –

0

使用find_in_set搜索和OR找到任何輸入值。

select cv1, cv2 
    from t1 
where find_in_set('php', concat(cv_content1, ',', cv_content2)) > 0 
    or find_in_set('dotnet', concat(cv_content1, ',', cv_content2)) > 0 

編輯1

select 
    case when find_in_set('php', cv_content1) 
      or find_in_set('dotnet', cv_content1) 
     then cv1 else '---' end as cv1 
, case when find_in_set('php', cv_content2) 
      or find_in_set('dotnet', cv_content2) 
     then cv2 else '---' end as cv2 
from t1; 

演示 @MySQL Fiddle


編輯2

select 
    case when find_in_set('php', replace(cv_content1, ' ', ',')) 
      or find_in_set('dotnet', replace(cv_content1, ' ', ',')) 
     then cv1 else '---' end as cv1 
, case when find_in_set('php', replace(cv_content2, ' ', ',')) 
      or find_in_set('dotnet', replace(cv_content2, ' ', ',')) 
     then cv2 else '---' end as cv2 
from t1; 

演示 @MySQL Fiddle

+0

它會獲取關鍵字php的cv1和cv2值,我想如果關鍵字不在cv_content1中,那麼cv1應該爲null –

+0

是的。我剛剛看到你不期待'aaa'。讓我重新構建查詢。 –

+0

@BharatMaheshwari:檢查我更新的答案。 –