我有如下表结构:获取两列,如果条件的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语句
所以你试过? –
您存储关键字的方式很糟糕。您将面临查询数据的问题 – asprin
cv_content1和cv_content2字符串是否存在?而所有的标签只是逗号分隔的字符串?如果是这种情况,你应该改变你的数据库布局 – WizKid