Я создаю выпадающую форму выбора, основанную на результатах двух запросов MySQL с перекрестными ссылками, однако я не могу правильно составить список по алфавиту.
Я беру идентификационный номер из первой таблицы «list1», но затем мне нужно получить его имя из второй таблицы «list2» и отображать их в алфавитном порядке.
Я пробовал ORDER BY, но на самом деле это не имеет смысла ни в одном запросе.
<select name="select">
<?php
$sql = "SELECT DISTINCT id FROM list1";
$query = mysqli_query($connection, $sql) or die (mysqli_error());
while ($row= mysqli_fetch_array($query)) {
$id = $row["id"];
// *** get the ID name from second table ***
$sql2 = "SELECT * FROM list2 WHERE id='$id' ORDER BY name ASC LIMIT 1";
$query2 = mysqli_query($connection, $sql2) or die (mysqli_error());
while ($row2 = mysqli_fetch_array($query2)) {
$name = $row2["name"];
echo '<option value="'.$id.'">'.$name.'</option>';
} // end while
// *** end get name ***
} // end while
?>
</select>
Просто объедините два запроса в один:
select col1, col2 etc
from list2 where list2.id in (SELECT DISTINCT id FROM list1)
order by name asc
Это дает вам тот же список, который вы получили бы при использовании ваших запросов и последующих подзапросов, но это происходит за один раз, и вы можете упорядочить весь результат по мере необходимости.
<select name="select">
<?php
$sql2 = " select col1, col2 etc
from list2 where list2.id in (SELECT DISTINCT id FROM list1)
order by name asc
";
$query2 = mysqli_query($connection, $sql2) or die (mysqli_error());
while ($row2 = mysqli_fetch_array($query2)) {
$name = $row2["name"];
echo '<option value="'.$id.'">'.$name.'</option>';
} // end while
?>
</select>
Просто отметьте, что вы, вероятно, не должны использовать select *
при объединении таблиц, как это. Просто выберите нужные столбцы.
Других решений пока нет …