gpt4 book ai didi

PHP/MYSQL 搜索查询返回错误 : Subquery returns more than 1 row

转载 作者:行者123 更新时间:2023-11-30 01:16:57 26 4
gpt4 key购买 nike

拜托,我对 mysql 完全陌生,我的问题是:

我有一个名为“cong”的表,其中包含以下列(id、sort_code、pin、name、state、lga、zip、address、min、min_photo、sec、min_phone、sec_phone),其中包含所有会众。

列(state、lga)包含表“states”和“local_govt”中的 ID。

“states”表具有以下列(id、country_id、name),“local_govt”表具有以下列(id、country_id、state_id、name)。

我想对“cong”表进行搜索,该表应该在“state”和“local_govt”表中搜索匹配项,下面是我编写的搜索函数:

      <?php
function find_cong($term) {
$query = "SELECT * FROM cong";
$query .= " WHERE state rLIKE
(SELECT id FROM states WHERE upper(name) rLIKE '{$term}')";
$query .= " OR lga rLIKE
(SELECT id FROM local_govt WHERE upper(name) rLIKE '{$term}')";
$query .= " OR upper(name) rLIKE '{$term}'";
$query .= " OR upper(address) rLIKE '{$term}'";
$query .= " OR upper(sort_code) rLIKE '{$term}'";
$query .= " OR upper(pin) rLIKE '{$term}'";
$query .= " OR upper(zip) rLIKE '{$term}'";
$query .= " OR upper(min) rLIKE '{$term}'";
$query .= " OR upper(sec) rLIKE '{$term}'";
$query .= " OR upper(min_phone) rLIKE '{$term}'";
$query .= " OR upper(sec_phone) rLIKE '{$term}'";
$result = mysql_query($query);
confirm_query($result);
return $result;
}

function confirm_query($query) {
if (!$query) {
die("Database query failed : " . mysql_error());
}
}

?>

现在的问题是,它搜索一些术语并得出准确的结果,但对于某些特定术语(例如 local_govt 和州名称),它会弹出错误:(数据库查询失败:子查询返回多于1行)

请我需要你的帮助,因为我不知道如何更好地编写代码。谢谢。

最佳答案

您在 WHERE 语句的 stateslocal_govt 部分中有子查询。据推测,存在给定 $term 值的行,其中这些查询将返回多行的结果集。由于您使用的是 rLIKE,它期望根据一个值(而不是多个)进行计算,因此整个查询将出错。

相反,重构如下:

$query .= " WHERE state IN (SELECT id FROM states WHERE upper(name) rLIKE '{$term}')";
$query .= " OR lga IN (SELECT id FROM local_govt WHERE upper(name) rLIKE '{$term}')";

这将考虑到这种意外情况。

请注意,所编写的查询不太可能具有很高的性能。由于您正在扫描许多不同的列,因此最好不要在这里使用正则表达式,因为优化器将无法利用索引。理想情况下,将其减少为常数,以便您可以使用:

SELECT * FROM cong WHERE $term IN (upper(name), upper(address)...)

但是考虑到您的要求,这可能是不可能的。如果是这种情况,我可能会查看您的程序的设计,并尝试从应用程序端将查询拆分为最多针对一列的查找,例如:

SELECT * FROM cong WHERE $term rLIKE upper(NAME)

关于PHP/MYSQL 搜索查询返回错误 : Subquery returns more than 1 row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18964038/

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