0

亲爱的 Stackoverflowers,

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

例如:

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

例如,产品被添加到 subcats 中,但所有的蜜蜂都显示在 head 类别中。这工作正常,我这样做WHERE cID in (' . $subids . ')

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

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

希望有大神指点一下,谢谢大家!

4

4 回答 4

1

阅读以下内容:

与逗号分隔值相反,实现这一点可能会为您和您的同事省去很多麻烦,并简化您的查询,有效地消除复杂查询的需要。它也应该更快。

于 2013-07-05T05:57:59.873 回答
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
于 2013-07-05T06:16:25.083 回答
0

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

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

  1. MSDN 多对多链接
  2. 数据库规范化
于 2013-07-05T06:17:50.340 回答
0

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

于 2013-07-05T06:15:53.920 回答