2013-07-05 272 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