Intereting Posts

Правильно отображать результаты запроса mySQL one-to-many

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

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. добавить 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); }