Как заказать в двух PHP запросов MySQL, которые связаны между собой?

Я создаю выпадающую форму выбора, основанную на результатах двух запросов 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>

3

Решение

Просто объедините два запроса в один:

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 * при объединении таблиц, как это. Просто выберите нужные столбцы.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector