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},%'
答案 0 :(得分:3)
当您在子表中每行存储一个数字时,您在varchar中存储以逗号分隔的列表。然后你根本不必使用LIKE
。
答案 1 :(得分:1)
这是我的评论
+!因为需要重新格式化SQL。你确实意识到“百分比” 标志(%)是通配符。所以你是 基本上告诉它你可以 返回任何包含id ...所以 如果你搜索“23”你可以得到 “123”,你可以得到“234”或 “1234”......等等。
你回复了
感谢@Rock删除通配符工作!
现在我对此的回答是......如果你从字符串中删除了两个通配符,那么你实际上是在做“等于”。
IE:
WHERE bp.sub_category LIKE '{$id},'
应与
相同WHERE bp.sub_category = '{$id},'
因为在“LIKE”语句中没有任何通配符可以“匹配”。
请原谅我,如果我搞砸了“$”或“,”......我不是MySQL人