繁体   English   中英

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

[英]PHP MYSQL - Search comma separated list with a comma separated list

亲爱的Stackoverflowers,

我有一个mysql查询,该查询检查某些子类别是否是categoryID的一部分,以显示主要类别中子类别的所有产品。

例如:

  1. 类别
    • 子类别1
    • 子类别2
    • 子类别3

例如,将产品添加到子猫中,但所有蜂类均显示在标题类别中。 这工作正常,我WHERE cID in (' . $subids . ')使用WHERE cID in (' . $subids . ')完成此操作

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

因此,我正在寻找一种从逗号分隔列表内的逗号分隔列表中基本找到匹配项的方法,因为cID现在已成为逗号分隔ID,而FIND_IN_SET对此不起作用。

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

阅读以下内容:

与用逗号分隔的值相反,实现此方法应该可以为您和您的同事节省很多麻烦,并简化您的查询,从而有效地消除了对复杂查询的需求。 它也应该更快。

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

在单个字段中存储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

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

您真正需要做的是在数据库设计上进行工作,阅读标准化和其他相关主题,因此,我添加了一些链接,

  1. MSDN多对多链接
  2. 数据归一化

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM