php - 如何在 mysqli 语句中应用正则表达式

标签 php html mysql sql

<分区>

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

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

我有一个基于类别的页面 View 。因此,例如我想查看所有带有诺基亚品牌的手机。这意味着

SELECT * FROM product_table WHERE cat = nokia.

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

SELECT * FROM product WHERE cat *= Nokia.

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

是否正确?我该怎么办?

最佳答案

你可以使用简单的 like 子句

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

或者使用mysql regex feature , 如果你喜欢

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,...) 您可以简单地将它们关联到第三个associative table 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)

关于php - 如何在 mysqli 语句中应用正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18548083/

相关文章:

php - 即使在 PDO 准备语句和绑定(bind)参数之后也无法转义数组内的单引号

php - 查询性能 - MySQL

javascript - HTML5 Canvas A* 星型路径查找

html - 如何让div底部对齐?

表单中的CSS样式html弹出窗口?

php - 使用 PHP 的 Foreach 循环在单独的文本框中显示数据库中的每个条目

php - PHP/Mysql 中的任何语言概念以避免丢失字符串掩码(mysql_real_escape、addslahes 等)

javascript - 是否可以通过添加手动数据来更改从 JSON 数据生成的表?

java - 连接到 MySQL 服务器 JDBC

php - 这个数据库调用有什么问题?