在SQL语句中使用LIKE时没有完全匹配

时间:2010-06-05 04:22:33

标签: sql mysql

   SELECT bp.*,r.rating,COUNT(r.review_for),bp.business_name,bp.profile_member 
     FROM ibf_business_reviews r 
LEFT JOIN ibf_business_profiles bp ON ( r.review_for=bp.profile_member ) 
    WHERE bp.sub_category LIKE '%{$id},%'{$location_sql} 
 GROUP BY r.review_for HAVING COUNT(r.review_for) >=1 
 ORDER BY r.date_posted DESC LIMIT 0,2");

此查询用于在特定位置的某个sub_category id'%{$ id}中显示business_name的结果。我的问题是额外的结果显示在共享第二或第三位的类别中... ... viewcat& id = 54将显示在..viewcat& id = 154等

我使用LIKE可能是我的问题? WHERE bp.sub_category LIKE '%{$id},%'

2 个答案:

答案 0 :(得分:3)

当您在子表中每行存储一个数字时,您在varchar中存储以逗号分隔的列表。然后你根本不必使用LIKE

阅读First Normal Form

答案 1 :(得分:1)

这是我的评论

  

+!因为需要重新格式化SQL。你确实意识到“百分比”   标志(%)是通配符。所以你是   基本上告诉它你可以   返回任何包含id ...所以   如果你搜索“23”你可以得到   “123”,你可以得到“234”或   “1234”......等等。

你回复了

  

感谢@Rock删除通配符工作!

现在我对此的回答是......如果你从字符串中删除了两个通配符,那么你实际上是在做“等于”。

IE:

WHERE bp.sub_category LIKE '{$id},'

应与

相同
WHERE bp.sub_category = '{$id},'

因为在“LIKE”语句中没有任何通配符可以“匹配”。

请原谅我,如果我搞砸了“$”或“,”......我不是MySQL人