mysql_query帮助

时间:2011-09-13 20:57:16

标签: mysql select

我有产品数据库,如:

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类产品。

3 个答案:

答案 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);