PHP/MySQLi - 循环数组以构建动态 WHERE 子句

标签 php mysql arrays mysqli

我已经被困在某件事上几天了,我真的希望有人能帮助我。

我有一个名为 $default_districts 的数组,它是通过查询生成的,用于查找从某个点到预定义半径内的邮政编码区...因此存储的值的数量是动态的。

[0] => NR1
[1] => NR12
[2] => NR13
[3] => NR14
... etc.

最终,我试图找出在另一个地址的“半径”内有多少客户。 所以,我想使用绑定(bind)到准备好的语句的这些值......

例如

// get data records within the default radius
if ($stmt = $mysqli->prepare("SELECT clientdata_urn, clientdata_district
FROM tblhub_clientdata
WHERE clientdata_district = ?)) {

// bind param to vars
$stmt->bind_param( // LOOP THROUGH $default_districts HERE // ));

// execute statement
$stmt->execute();

// store
$stmt->store_result();

// get numrows
$total_numrows = $stmt->num_rows;

// close statement
$stmt->close();

} else {

// error
printf("Error counting total data within default radius: %s\n", $mysqli->error);

}

如果我对我想要创建的内容进行硬编码,它将是这样的......

SELECT clientdata_urn, clientdata_district
FROM tblhub_clientdata
WHERE clientdata_district = 'NR1' OR clientdata_district = 'NR12' OR clientdata_district = 'NR13' OR clientdata_district = 'NR14'

我是个新手,任何帮助将不胜感激。

谢谢。

最佳答案

欢迎来到SO,@Rachi。我相信这会解决您的问题。

首先,使用 IN 比使用一系列 OR 语句要好得多。我整理了一个SQLFIDDLE来证明这一点。

这采用以下形式

SELECT COUNT(id) as num_users, clientdata_district
FROM tblhub_clientdata
WHERE clientdata_district IN ('NR12', 'NR14')
GROUP BY clientdata_district

输出给出数组中每个区号内的用户数量。如果您想要您所在区域内所有区域的用户总数(您的问题不清楚),那么只需删除 GROUP BY 行 like this .

下一个挑战是构建字符串,以便将其放入查询中。最简单的方法是使用 implode function .

$query_string = implode(",", $default_districts)
$sql = "SELECT COUNT(id) as num_users, clientdata_district";
$sql.= "FROM tblhub_clientdata";
$sql.= "WHERE clientdata_district IN ($query_string)";
$sql.= "GROUP BY clientdata_district";

请注意,这不会在您的区号中添加 ' 标记,但从我所看到的您的代码来看,我认为这并不重要。最坏的情况只是丢弃 implode 语句并在 FOR 循环中构建字符串。

关于PHP/MySQLi - 循环数组以构建动态 WHERE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31701816/

相关文章:

php - MySQL 返回行,其中列包含由数组定义的类别(并为结果添加权重)

php - 没有 $_POST 数据?

mysql - 从连接表中选择最后一个值和总数

mysql - 如何通过SQL从表中查找已故的人?

php - 更改 PHP/SQL 查询时出现的问题

php - PHP 有内置的优化器吗?

php - 无法在 MySQL 查询中插入字符串变量

python - 在 Python 中索引 NumPy 图像数组时出错

c++ - 将二维上三角和下三角中的元素映射到线性结构

c# - 在 Array 类上使用 Linq 扩展