Я пытаюсь сделать два отдельных запроса базы данных и вернуть результаты в форму. Каждый результат записывается в таблицу.
Я хочу иметь возможность объединить два запроса в один и упорядочить результаты по номеру задачи.
ПЕРВЫЙ ЗАПРОС:
//Booking $Date= date("d/m/Y"); $driver = $_SESSION['username']; $dbTaskRecords = "SELECT * FROM booking WHERE driver='$driver' AND Date= CAST('$Date_search' AS DATE) ORDER BY TaskNo ASC"; $dbTaskRecords_result = mysql_query($dbTaskRecords);
ВТОРОЙ ВОПРОС:
//Return Booking $dbTaskReturn = "SELECT * FROM returnbooking WHERE driver='$driver' AND Date= CAST('$Date_search' AS DATE) ORDER BY TaskNo ASC"; $dbTaskReturn_result = mysql_query($dbTaskReturn);
Затем результаты выводятся на страницу через инструкцию while.
$i=0; while ($row = mysql_fetch_array($dbTaskRecords_result)){ //Control Structure for Move Time on first Job of day if ($i==0 ){ $time = $row["Time"]; //$time = 'N/A'; }else{ $time = 'N/A'; } //Get Rego from trucks table $truckID = $row["TruckID"]; $Rego_select = mysql_query("SELECT VechicleRegistration FROM trucks WHERE TruckID = '$truckID'" ) or die("Problem reading table: " . mysql_error()); $Rego = mysql_result($Rego_select,0); //Get unregisted from trucks table $Unregisted_select = mysql_query("SELECT Unregistered FROM trucks WHERE TruckID = '$truckID'" ) or die("Problem reading table: " . mysql_error()); $Unregisted = mysql_result($Unregisted_select,0); $id_note = $row["BookingID"]; echo '<td><a href="taskpage.php?id='.$id_note.'"><button>'. $row['TaskNo']."</button><a/></td>"; echo "<td>". $time . "</td>"; // Time Frame echo "<td>". $Unregisted."</td>"; // Pickup echo "<td>". $Rego."</td>"; // Unregisted echo "<td>".$row["PickupLocation"] . "</td>"; // Rego echo "<td>".$row["DropOffLocation"] . "</td></tr>"; // Delivery $i=$i+1;//Control Set } echo'</tr>';
Я повторяю этот же код вывода для результатов бронирования.
Можно ли объединить оба запроса в один так, чтобы набор результатов из обеих таблиц мог быть заказан ASC и выданным вышеприведенным оператором while.
Это одна из многих причин избежать Select *
. Вы можете просто использовать союз
Select Time, TruckId, TaskNo, PickupLocation, DropOffLocation From booking Where driver='$driver' And Date= CAST('$Date_search' AS DATE) Union All Select Time, TruckId, TaskNo, PickupLocation, DropOffLocation From returnbooking WHERE driver='$driver' And Date= CAST('$Date_search' AS DATE) Order By TaskNo Asc
В этом решении вам нужно перечислить столбцы и убедиться, что тип столбцов в том порядке, в котором они перечислены в двух предложениях Select, идентичны.
Из того, что я могу сказать, у вас есть три варианта, чтобы выполнить то, что вам нужно.
Вы можете использовать соединение, предполагая, что в двух таблицах есть внешний ключ.
Вы можете использовать объединение для добавления двух наборов результатов.
Вы можете выводить оба запроса в массив и перебирать этот массив для вывода. Это, вероятно, менее эффективно, чем объединение, но дает вам большее разделение между двумя наборами результатов.
Использование нескольких меньших таблиц позволяет организовать ваши данные и гарантирует, что имена столбцов будут одинаковыми.
Если у нас есть, например, компания с кучей клиентов и где клиенты могут быть частными клиентами или компаниями, используя отдельную таблицу для этих адресов и две справочные таблицы с идентификаторами client_id и adres_id или company_id и adres_id, adres всегда будет иметь те же имена столбцов.
Не только это, но если определенная информация ограничена, вы не рискуете хранить пустое пространство …
В конце вы должны действительно придерживаться SQL для получения ВСЕХ данных, которые вам нужны за один раз, и использовать PHP (или другие скрипты на стороне сервера) для форматирования этих данных для пользователя. Это не большая проблема для внутреннего или частного веб-сайта, но когда у вас больше пользователей, вы захотите ограничить количество и размер ваших данных.
Использование только 1 длинного запроса часто лучше, чем несколько меньших.