在現代社會中,點餐系統已成為大眾餐飲業中不可或缺的組成部分,人們不僅要求食品的品質口感,也需要在配送過程中能夠方便追蹤餐品的配送日期、時間以及送達地點等信息。MySQL 數據庫具有良好的可擴展性和穩定性,廣泛應用于各行各業,本文將介紹如何利用 MySQL 數據庫實現點餐系統的配送跟蹤功能,以滿足用戶對配送的需求。
一、數據表設計
在 MySQL 數據庫中,數據表是組織和存儲數據的基本單位。針對點餐系統配送跟蹤功能,我們可以設計以下數據表:
- 訂單表(orders)
字段名 | 數據類型 | 長度 | 說明 |
---|---|---|---|
id | int | 10 | 訂單編號 |
customer | varchar | 20 | 客戶姓名 |
phone | varchar | 11 | 客戶手機號 |
address | varchar | 100 | 配送地址 |
status | int | 1 | 訂單狀態(0:未送達,1:已送達) |
create_time | datetime | 0 | 下單時間 |
delivery_time | datetime | 0 | 配送時間 |
total_price | decimal | 10, 2 | 訂單總價 |
- 餐品表(dishes)
字段名 | 數據類型 | 長度 | 說明 |
---|---|---|---|
id | int | 10 | 餐品編號 |
name | varchar | 20 | 餐品名稱 |
price | decimal | 10, 2 | 餐品單價 |
category | varchar | 20 | 餐品類別 |
- 訂單詳情表(order_details)
字段名 | 數據類型 | 長度 | 說明 |
---|---|---|---|
id | int | 10 | 詳情編號 |
order_id | int | 10 | 訂單編號 |
dish_id | int | 10 | 餐品編號 |
quantity | int | 3 | 餐品數量 |
subtotal | decimal | 10, 2 | 餐品小計 |
二、數據庫操作
- 數據庫連接
使用 PHP 語言連接到 MySQL 數據庫:
// 數據庫連接參數 $host = 'localhost'; // 數據庫主機地址 $user = 'root'; // 數據庫用戶名 $password = ''; // 數據庫密碼 $dbname = 'order_system'; // 數據庫名稱 // 連接數據庫 $conn = mysqli_connect($host, $user, $password, $dbname); if (!$conn) { die('數據庫連接失?。? . mysqli_connect_error()); }
登錄后復制
- 查詢訂單信息
實現點餐系統配送跟蹤功能的關鍵是查詢訂單信息,并在頁面上展示配送狀態信息。以下代碼查詢所有已配送的訂單信息:
// 查詢已配送的訂單信息 $sql = "SELECT o.*, SUM(d.price * od.quantity) AS total_price FROM orders o LEFT JOIN order_details od ON o.id = od.order_id LEFT JOIN dishes d ON od.dish_id = d.id WHERE o.status = '1' GROUP BY o.id ORDER BY o.delivery_time DESC"; $result = mysqli_query($conn, $sql);
登錄后復制
- 更新訂單狀態
當訂單的配送狀態發生變化時,需要及時更新數據庫中訂單的狀態。以下代碼用于更新訂單的狀態為“已送達”:
// 更新訂單狀態 $order_id = $_POST['order_id']; // 獲取訂單編號 $sql = "UPDATE orders SET status = '1' WHERE id = $order_id"; if (mysqli_query($conn, $sql)) { // 更新成功 echo '1'; } else { // 更新失敗 echo '0'; }
登錄后復制
三、頁面實現
- 訂單列表頁面
在點餐系統的后臺管理頁面中,我們可以展示所有已經配送的訂單信息,并包含操作按鈕以進行訂單狀態的修改。以下代碼展示已配送訂單列表的 HTML 代碼:
<table> <thead> <tr> <th>訂單編號</th> <th>客戶姓名</th> <th>客戶手機號</th> <th>配送地址</th> <th>訂單總價</th> <th>下單時間</th> <th>配送日期</th> <th>配送時間</th> <th>操作</th> </tr> </thead> <tbody> <?php while ($row = mysqli_fetch_assoc($result)) { echo '<tr>'; echo '<td>' . $row['id'] . '</td>'; echo '<td>' . $row['customer'] . '</td>'; echo '<td>' . $row['phone'] . '</td>'; echo '<td>' . $row['address'] . '</td>'; echo '<td>' . $row['total_price'] . '</td>'; echo '<td>' . $row['create_time'] . '</td>'; echo '<td>' . date('Y-m-d', strtotime($row['delivery_time'])) . '</td>'; echo '<td>' . date('H:i', strtotime($row['delivery_time'])) . '</td>'; echo '<td><button class="delivered-btn" data-order-id="' . $row['id'] . '">已送達</button></td>'; echo '</tr>'; } ?> </tbody> </table>
登錄后復制
- 訂單狀態更新
當操作員點擊“已送達”按鈕時,需要向服務器發送 AJAX 請求以更新訂單狀態,并在頁面上動態地展示訂單狀態的變化。以下代碼演示 AJAX 請求的 JavaScript 代碼:
// 訂單狀態更新 $(document).on('click', '.delivered-btn', function () { var order_id = $(this).attr('data-order-id'); // 獲取訂單編號 $.ajax({ url: 'update_order_status.php', method: 'POST', data: {order_id: order_id}, success: function (res) { if (res === '1') { // 更新成功 alert('訂單狀態已更新!'); location.reload(); // 刷新頁面 } else { // 更新失敗 alert('訂單狀態更新失??!'); } } }); });
登錄后復制
四、總結
利用 MySQL 數據庫實現點餐系統的配送跟蹤功能的過程涉及到數據庫表的設計,以及對訂單信息的查詢和更新。與此同時,我們還需要在頁面上展示訂單信息并實現動態的訂單狀態更新。以上提供了一個基本的實現思路,各位讀者可以根據實際需求和業務邏輯適當進行拓展和修改。