我有产品数据库,如:
id: 5
catid: 2,4,26,33,46
name: product one
etc...
对于每个商店产品catid
存储多个以逗号分隔的ID类别,因为一个产品可能会出现在多个类别中。
如何查看ID为26的示例类别的产品?
我的第一个想法是:
mysql_query("SELECT * FROM products WHERE catid LIKE '%26%'");
但效果不佳,因为它也展示了2类和46类产品。
答案 0 :(得分:1)
使用FIND_IN_SET()
功能:SELECT * FROM products where FIND_IN_SET(26, catid) > 0
答案 1 :(得分:0)
mysql find_in_set()函数将执行此操作。
然而,它永远不会快。 Mysql索引对于在字符串中间查找匹配项没有用。它们仅在您匹配整个字符串或从头开始的子字符串时才起作用。每次查询都需要对数据进行全面扫描。
如果您在开发过程中不是太远,可以更改数据模型以使用类似于以下内容的映射表:
create table product_cat (
rel_id primary key,
product_id int,
cat_id int,
unique (product) product_id,
index (cat_product) cat_id, product_id
)
然后,在表中为每个类别/产品关系添加一行,并加入该表。可以快速进行此类查询。
答案 2 :(得分:-1)
这样做。
SELECT * FROM products WHERE catid IN (26);
这应该可以实现您的目标。
这也可用于扩展您的选择。
SELECT * FROM products WHERE catid IN (26,27);