Правильно отображать результаты одного-многих запросов MySQL - PullRequest
2 голосов
/ 15 июня 2011

У меня есть две таблицы:

      TRIPS
-----------------
tripID | clientID

и

              LEGS
--------------------------------
legID | depart | arrive | tripID

TRIPS имеет отношение один-ко-многим с LEGS, так как существует несколько legID на tripID.Мне нужно отобразить их в следующем формате:

Trip tripID1:
    Leg legID1: depart1 - arrive1
    Leg legID2: depart2 - arrive2

Trip tripID2:
    Leg legID3: depart3 - arrive3
    Leg legID4: depart4 - arrive4

etc...

Мне удалось перебрать legID через цикл WHILE(), но у меня возникли проблемы с встраиванием цикла LEGS в цикл TRIPS,Мой запрос:

<?php
$legsQuery = "SELECT  trips.tripID, legs.depart, legs.arrive FROM legs, trips WHERE `trips`.tripID = `legs`.tripID";
$legsQueryResult = mysql_query($legsQuery) or die("QUERY LEG ERROR: " . mysql_error());
while($row = mysql_fetch_assoc($legsQueryResult)) {
    print_r($row);
}
?>

1 Ответ

1 голос
/ 15 июня 2011
  1. добавьте предложение order by для сортировки по идентификатору поездки
  2. создайте $lastTripID переменную для проверки, когда вы получаете "ноги" из "нового путешествия"
  3. [рекомендуется ] использовать join для выбора данных из нескольких таблиц

Код:

<?php
    $legsQuery = "
        select  
            trips.tripID, 
            legs.depart, 
            legs.arrive 
        from 
            legs
            inner join trips on trips.tripID = legs.tripID
        order by
            trips.tripID
    ";
    $legsQueryResult = mysql_query($legsQuery) or die("QUERY LEG ERROR: " . mysql_error());
    $lastTripID = null;
    while ($row = mysql_fetch_assoc($legsQueryResult)) {
        if ( $row['tripID'] !== $lastTripID ) {
            echo $row['tripID'], "\n";
            $lastTripID = $row['tripID'];
        }
        print_r($row);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...