PHP Alternative to using a query within a loop
mysql, php
Solution
To further add to MrCodes answer, if you start with an array:-
$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 />";
}
}
As a database design issue, you probably should have the town names in a separate table and the table for the person contains the id of the town rather than the actual town name (makes validation easier, faster and with the validation less likely to miss records because someone has mistyped their home town)
Problem
I was told that it is a bad practice to use a query (select) within a loop because it slows down server performance. I have an array such as ``` Array ( [1] => Los Angeles ) Array ( [2] =>New York) Array ( [3] => Chicago ) ``` These are just 3 indexes. The array I'm using does not have a constant size, so sometimes it can contain as many as 20 indexes. Right now, what I'm doing is (this is not all of the code, but the basic idea) - For loop - query the server and select all people's names who live in "Los Angeles" - Print the names out Output will look like this: ``` Los Angeles Michael Stern David Bloomer William Rod New York Kary Mills Chicago Henry Davidson Ellie Spears ``` I know that's a really inefficient method because it could be a lot of queries as the table gets larger later on. So my question is, is there a better, more efficient way to SELECT information based on the stuff inside an array that can be whatever size?