我被告知在循环中使用查询(选择)是一种不好的做法,因为它会降低服务器性能.
我有一个像这样的数组
Array ( [1] => Los Angeles )
Array ( [2] =>New York)
Array ( [3] => Chicago )
Run Code Online (Sandbox Code Playgroud)
这些只是3个索引.我正在使用的数组没有常量大小,因此有时它可以包含多达20个索引.
现在,我正在做的是(这不是所有的代码,但基本的想法)
输出将如下所示:
Los Angeles
Michael Stern
David Bloomer
William Rod
New York
Kary Mills
Chicago
Henry Davidson
Ellie Spears
Run Code Online (Sandbox Code Playgroud)
我知道这是一种非常低效的方法,因为随着表的变大,它可能会有很多查询.
所以我的问题是,是否有一种更好,更有效的方法来根据数组中的内容选择信息,这些内容可以是任何大小的?
使用IN查询,它将在单个查询中获取所有结果:
SELECT * FROM people WHERE town IN('LA', 'London', 'Paris')
Run Code Online (Sandbox Code Playgroud)
要进一步添加 MrCodes 答案,如果您从数组开始:-
$Cities = array(1=>'Los Angeles', 2=>'New York', 3=>'Chicago');
$query = "SELECT town, personname FROM people WHERE town IN('".implode("','", $Cities)."') ORDER BY town";
if ($sql = $mysqliconnection->prepare($query))
{
$sql->execute();
$result = $sql->get_result();
$PrevCity = '';
while ($row = $result->fetch_assoc())
{
if ($row['town'] != $PrevCity)
{
echo $row['town']."<br />";
$PrevCity = $row['town'];
}
echo $row['personname']."<br />";
}
}
Run Code Online (Sandbox Code Playgroud)
作为数据库设计问题,您可能应该将城镇名称放在单独的表中,并且人员的表包含城镇的 id 而不是实际的城镇名称(使验证更容易、更快,并且验证不太可能错过记录)因为有人输错了他们的家乡)
| 归档时间: |
|
| 查看次数: |
4869 次 |
| 最近记录: |