2013-05-31 85 views
3

我有2個表offer_master_catagory和user_profile,我將所有offer_master_catagory存儲在格式爲16,17,18的user_profile表字段名稱user_offers中。檢查是否條件與MySQL IN不起作用

我正在寫一個SQl來獲取所有記錄,提供訂閱狀態是或否。但是當我將user_offers字段替換爲dynamic時,我的結果並不正確。

SELECT omc.id , omc.name,uf.user_offers, 
IF(omc.id IN(uf.`user_offers`), 'Yes','No') AS STATUS FROM 
`offer_master_catagory` AS omc 
, `user_profile` AS uf 
WHERE omc.status='1' AND omc.lang_code='en' AND uf.user_id='19' 

當我替換user_offer硬編碼像(16,17,18)那麼它顯示正確的結果。

SELECT omc.id , omc.name,uf.user_offers, 
IF(omc.id IN(16,17,18), 'Yes','No') AS STATUS FROM 
`offer_master_catagory` AS omc 
, `user_profile` AS uf 
WHERE omc.status='1' AND omc.lang_code='en' AND uf.user_id='19' 

請爲此建議解決方案。

回答

5

使用FIND_IN_SET()

,而不是

omc.id IN(uf.`user_offers`) 

嘗試

FIND_IN_SET(omc.id, uf.`user_offers`) > 0 

但是,您的問題的最佳解決方案是適當規範化表格。不要在表格中存儲逗號分隔值。

我建議的架構設計是一個三表設計,其中它是一個Many-to-Many關係,

user_profile表名單這裏所有配置)

  • 用戶ID(PK)
  • 其他領域...

offer_master_catagory表列表中的所有類別的每個配置文件在這裏

  • 用戶ID(FK)(也PK或UQ與柱的categoryID)
  • 的categoryID(FK)

類別表在此處列出所有類別

  • 的categoryID(PK)
  • 等領域...