php pdo,重构通配符语句

标签 php mysql sql pdo

我想知道如何重构这段代码,这似乎不是为每个字母(A-Z)提取每个结果的最佳方法。

我正在考虑一个 foreach 语句,例如 foreach %a, %b 等......查询数据库。

$categoryA = query('SELECT * FROM category WHERE category LIKE "A%"',
  array('category' => ['category']),
  $conn);

$categoryB = query('SELECT * FROM category WHERE category LIKE "B%"',
  array('category' => ['category']),
  $conn);

这是我的功能

function query($query, $bindings, $conn)
{
    $stmt = $conn->prepare($query);
    $stmt->execute($bindings);
    return $stmt;
}

最佳答案

您可以使用正则表达式代替 LIKE 来执行此操作。将您的查询更改为:

SELECT * FROM category WHERE category REGEXP "^[A-Z].*"

进一步解释:正则表达式 ^[A-Z].* 表示以 A 到 Z 的字母开头,后跟任意数量的字符的任何字符串。

我要指出的是,这种形式的查询虽然比一堆 LIKE 查询看起来更优雅,但速度不是很快,因为它不使用索引。这意味着只有当您知道没有很多行需要扫描或者您将返回表中的大部分行时才应该使用它。如果这两个条件都不存在,则最好按如下方式连接 LIKE 语句:

SELECT * FROM category WHERE (category LIKE "A%" OR category LIKE "B%" OR ... )

后一种形式将使用类别字段上的索引(如果存在)。

关于php pdo,重构通配符语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25164707/

相关文章:

php - 使用 SQL 将新用户和用户元添加到数据库中

php - 如何将搜索栏的结果发布到表格中? PHP代码

php - 在 PHP 中显示和检索数据库中的图像

mysql - 使用嵌套子查询优化 mysql 查询

mysql - 我如何阅读这个 mysql select 查询?

sql - 在查询结果中插入行(总和)

PHP 转义查询字符串变量

php - 图片源在 Laravel 5.2 中不可读 - Intervention Image

php - 从 WordPress 中的自定义表返回变量(从 URL 检索后)

java - 当autocommit=false并且没有提交或回滚时Oracle如何处理SQL?