簡體   English   中英

PHP / MySQLi-遍歷數組以構建動態WHERE子句

[英]PHP/MySQLi - looping through an array to build dynamic WHERE clause

我已經堅持了幾天了,我真的希望有人能幫我。

我有一個名為$ default_districts的數組,該數組由查詢生成,以在距點的預定義半徑內找到郵政編碼區...因此存儲的值數量是動態的。

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

最終,我試圖找出在另一個地址的“半徑”內有多少客戶。 所以,我想使用那些綁定到准備好的語句的值...

例如

// 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 這一行即可。

下一個挑戰是構建字符串,以便可以將其放入查詢中。 最簡單的方法是使用爆破功能

$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循環中構建字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM