簡體   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