2013-07-05 329 views
0

親愛Stackoverflowers,PHP MYSQL - 搜索逗號,逗號分隔列表分隔列表

我有一個MySQL查詢,檢查,如果某些子類是的categoryID顯示從子類別中的產品的主要類別的一部分。

例如:

  1. 類別
    • 子目錄1
    • 子目錄2
    • 子類別3

例如產品被添加到subcats但ALL beeing顯示在頭上類別。 這工作得很好,我做這與WHERE cID in (' . $subids . ')

但現在說到它的CID用來裝只有一個值,但由於它必須是能夠將產品添加到多個類別,我現在保存多個選擇IDS作爲逗號分隔在cID字段中。

因此,即時通訊尋找一種方式,從逗號分隔列表中的逗號分隔列表中基本找到匹配項,因爲cID現在變成逗號分隔的ID和FIND_IN_SET不起作用。

我希望有人能發光一點,謝謝大家!

回答

1

有其中一個寫着:

實現這一點,而不是逗號分隔值,也許應該拯救你和你的同事有很多頭痛和簡化您的查詢,有效地消除了對複雜查詢的需求。它也應該更快。

+0

如果你實現了多對多的數據模型,你的查詢可能看起來像這樣:SELECT * FROM table_a LEFT JOIN junction_table ON table_a.cID = junction_table.cID WHERE junction_table.subid IN($ subids) 「喲你可能還想添加'GROUP BY table_a.primary_key',這樣你就可以從table_a得到一個獨特的記錄,即使有多個匹配的子類。 –

0

在一個字段,存儲CSV是不是一個好主意。在那搜索需要使用LIKE子句。

where CID LIKE '$cid1,' or CID LIKE ',$cid1,' or CID LIKE ',$cid1' or 
     CID LIKE '$cid2,' or CID LIKE ',$cid2,' or CID LIKE ',$cid2' or 
     .... so on 

此外FIND_IN_SET也可以工作。

where FIND_IN_SET($cid1, CID) OR FIND_IN_SET($cid2, CID) .. so on 
0

我現在保存多個所選擇的ID作爲逗號在CID字段分離。這是一個非常糟糕的做法,爲什麼要將CSV存儲在單個字段中,您可以改變您的設計,製作一個單獨的表格,其中每個值都會有一個新行並將映射到FK。

你真正需要做的,是在你的數據庫設計工作,閱讀正常化以及其他相關主題,我有這麼加了一些鏈接,

  1. MSDN Link on Many to Many
  2. Databae Normalization