gpt4 book ai didi

php pdo,重构通配符语句

转载 作者:行者123 更新时间:2023-11-29 23:59:11 25 4
gpt4 key购买 nike

我想知道如何重构这段代码,这似乎不是为每个字母(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com