在逗号分隔的数据库列中查找项目

时间:2017-05-17 08:43:07

标签: php mysql sql regex database

我正致力于搜索电子商务平台的算法。该平台能够为不同的产品创建变体,产品的所有可用变体都包含在逗号分隔列中。以下是所有领域。

  1. product_id - 例如1
  2. variation_combo - 例如54,35,49(这些是逗号分隔的ID,用于不同的变体)
  3. product_name - 例如“Nike brandded Tshirt”
  4. 这就是我想要实现的目标,例如

    • SELECT product_id FROM table where variation_combo contains 35 AND 54 AND 49
    • SELECT product_id FROM table where variation_combo contains 35 AND 54
    • SELECT product_id FROM table where variation_combo contains 49

3 个答案:

答案 0 :(得分:2)

您可以使用LIKE关键字

SELECT product_id FROM table where variation_combo LIKE '%35%' AND LIKE '%54%' AND LIKE '%49%'

我希望这会有所帮助

答案 1 :(得分:2)

参考: MySQL query finding values in a comma separated string

select product_id from table where find_in_set('35',variation_combo) <> 0   and 
find_in_set('54',variation_combo) <> 0 and find_in_set('49',variation_combo) <> 0

答案 2 :(得分:1)

我强烈建议您重新设计列表值并将其移动到详细信息表中。

但是,如果您完全绑定到字段设计中的列表,则可以使用RLIKE检查列表中的值。如果ID只是字母数字(或者更确切地说,不包含001-01等字边界),则任何单个ID都可以与\bID\b正则表达式匹配。所以你的陈述将转向

SELECT product_id
    FROM table 
    where variation_combo RLIKE '\\b35\\b'
        AND variation_combo RLIKE '\\b54\\b'
        AND variation_combo RLIKE '\\b49\\b'

SELECT product_id
    FROM table 
    where variation_combo RLIKE '\\b35\\b'
        AND variation_combo RLIKE '\\b54\\b'

SELECT product_id
    FROM table 
    where variation_combo RLIKE '\\b49\\b'