2010-06-05 65 views
2
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"); 

此查詢用於在特定位置顯示某個子類別id'%{$ id}中的business_name結果。我的問題是多餘的結果顯示在共享第二或第三位又名... viewcat & ID = 54將顯示在..viewcat & ID = 154等等我使用LIKE可能是我的問題在SQL語句中使用LIKE時沒有完全匹配

類別? WHERE bp.sub_category LIKE '%{$id},%'

+1

喜@強尼 - 凱瑟爾〜你可以重新格式化SQL,並且可以驗證問題的措辭就像你想要的?如果我瞭解你,你想知道如何停止匹配諸如154的東西,但只匹配54?然後使用=而不是'LIKE' ... – jcolebrand 2010-06-05 04:25:15

+0

+!因爲需要重新格式化SQL。你意識到「百分比」符號(%)是通配符。所以你基本上告訴它,你可以返回任何包含'id'的東西...所以如果你搜索「23」,你可以得到「123」,你可以得到「234」或「1234」......等。 – 2010-06-05 04:28:36

+0

道歉的格式問題,我會給那個鏡頭搖滾 – user338813 2010-06-05 04:37:51

回答

1

這裏是我的評論

+!因爲需要重新格式化SQL。您意識到「百分比」符號(%)是通配符。所以你 基本上告訴你,你可以 返回任何包括身份證...如此 如果你搜索「23」,你可以得到 「123」,你可以得到「234」或 「1234」...等

和你說

感謝@Rock移除工作的通配符!

現在我的答案是......如果你從字符串中刪除了兩個通配符,那麼你基本上是在做一個「等號」。

IE:

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

應該是一樣的

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

因爲你沒有在 「LIKE」 語句中的任何通配符 「匹配」。

請原諒我,如果我搞砸了「$」或「」 ......我不是一個MySQL的傢伙

+0

真棒謝謝我會投你的答案,但我沒有代表..這是公認的答案! – user338813 2010-06-05 05:32:20

+0

即使你不能投票,你也應該能夠「檢查」它。 – 2010-06-05 05:33:47

+0

_____ ;-) _____ – 2010-06-05 05:35:10

3

當您應該在子表中存儲每行一個數字時,您正在將逗號分隔的列表存儲在varchar中。那麼你根本不需要使用LIKE

請閱讀First Normal Form

+0

謝謝比爾我有點繼承這個數據模型,但很好的建議..我會給你投票,但我還沒有代表 – user338813 2010-06-05 04:47:43

+0

聰明的演繹... @OP:你可能想投資一些時間來標準化數據庫,如果你有這種力量......即使有人把它放在你的腿上。 – mpen 2010-06-05 05:30:48

+0

謝謝@Mark ..我認爲這是正確的做法,這是我週末的生活 – user338813 2010-06-05 05:38:20