在現代社會中,點餐系統已成為大眾餐飲業中不可或缺的組成部分,人們不僅要求食品的品質口感,也需要在配送過程中能夠方便追蹤餐品的配送日期、時間以及送達地點等信息。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 數據庫實現點餐系統的配送跟蹤功能的過程涉及到數據庫表的設計,以及對訂單信息的查詢和更新。與此同時,我們還需要在頁面上展示訂單信息并實現動態的訂單狀態更新。以上提供了一個基本的實現思路,各位讀者可以根據實際需求和業務邏輯適當進行拓展和修改。






