PHP MYSQL - 用逗号分隔列表搜索逗号分隔列表

时间:2013-07-05 05:55:06

标签: php mysql

亲爱的Stackoverflowers,

我有一个mysql查询,它检查某些子类是否属于categoryID,以显示主类别中子类别的所有产品。

例如:

  1. 类别
    • 子类别1
    • 子类别2
    • 子类别3
  2. 例如,产品被添加到子类别但是头部类别中显示的所有产品。 这工作正常,我使用WHERE cID in (' . $subids . ')

    执行此操作

    但现在来了,cID过去只保留一个值,但由于必须可以将产品添加到多个类别,我现在将多个选定的id保存为cID字段中的逗号分隔。

    所以我正在搜索一种从逗号分隔列表中的逗号分隔列表中基本找到匹配的方法,因为cID现在已成为逗号分隔ID,而FIND_IN_SET不适用于此。

    我希望有人能发光,谢谢大家!

4 个答案:

答案 0 :(得分:1)

阅读以下内容:

实现这一点,而不是以逗号分隔的值,可能会让您和您的同事头疼并简化您的查询,从而有效地消除了复杂查询的需要。它也应该更快。

答案 1 :(得分:0)

在数据库中的此列上添加全文搜索索引,然后使用以下sql查询 参考 - http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

答案 2 :(得分: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

答案 3 :(得分:0)

我现在将多个选定的ID保存为cID字段中的逗号分隔。这是一个非常糟糕的方法,为什么你要在一个字段中存储一个CSV,你不要改变你的设计,制作一个单独的表,其中每个值将有一个新行,并将映射到FK。

您真正需要做的是,您的数据库设计工作,阅读规范化和其他相关主题,我已经添加了一些链接,

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