1

我使用的是纯 php,而不是任何 CMS,例如 Wordpress。

我有一个产品表,其中有一个产品类别的 cat 字段。

我有一个基于类别的页面视图。因此,例如我想查看所有带有诺基亚品牌的手机。它的意思是

SELECT * FROM product_table WHERE cat = nokia.

这仅适用于产品不是多类别的情况。如果以下产品是这样分类的:Nokia, black, new, expensive, top-rated; 那么我需要在我的 SQL 语句中使用正则表达式。例如这样的:

SELECT * FROM product WHERE cat *= Nokia.

我的产品表的 cat 字段是一个字符串,每个 cat 用逗号分隔

这是对的吗?我应该怎么办?

4

1 回答 1

1

You can you plainlike子句

SELECT * FROM product_table WHERE cat like '%Nokia%'

或者使用mysql 正则表达式功能,如果你喜欢

SELECT * FROM product_table WHERE cat REGEXP '.*Nokia.*'

而且,是的,您的数据模型有问题 - 您应该在cat字段中使用 1 或 2 个以上的表而不是逗号分隔的字符串。

添加:

SELECT * FROM product_table WHERE (cat like '%Nokia,%' or cat like '%,Nokia%')

在 ANSI SQL 中,或

SELECT * FROM product_table WHERE FIND_IN_SET('Nokia',cat)

具有特定于 MySQL 的功能 - 上面给出的所有 4 个查询都像地狱一样无效,并且在不更改数据模型的情况下无法进行优化。

假设您有两个表products(product_id,product_name,...)categories(cat_id,cat_word,...)您可以通过第三个关联表简单地将它们关联起来 product_in_categories(product_id,cat_id)

以及使用新数据模型的有效类别选择查询示例:

SELECT * FROM products p
WHERE exists(select 1 from categories c, product_in_categories pc 
  where cat_word='Nokia' and c.cat_id=pc.cat_id and pc.product_id=p.product_id)
于 2013-08-31T12:28:40.890 回答