У меня есть пара форм:
В первую форму ввожу: Дата бронирования, информация о клиенте и таблица, которую я назначаю на эту дату.
Я ввожу вторую форму: Данные для принятия заказа, я ввожу дату и таблицу, и я хочу знать, какой идентификатор бронирования связан с этим.
Теперь я не могу понять, как это сделать, поскольку дата резервирования, table_number и идентификатор резервирования не извлекаются из таблицы резервирования с помощью следующего запроса:
SELECT o.OrderID
, o.MenuItemID
, o.ReceiptID
, r.Res_Datum
, r.Tafel_Id
, r.Reservering_Id
FROM Orders o
JOIN reserveringen r
ON o.Res_ID = r.Reservering_Id
GROUP
BY o.Res_Datum
, o.Res_ID
, o.Tafel_Id
Однако этот запрос работает:
$sql = "
SELECT O.Res_Datum
, O.Res_ID
, O.Tafel_Id
, O.ReceiptID
, SUM(MI.ItemPrice) TotalReceiptPrice
FROM Orders O
JOIN MenuItem MI
ON O.MenuItemID = MI.MenuItemID
GROUP
BY O.Res_Datum
, O.Res_ID
, O.Tafel_Id
";
Проблема в том, что мне нужно вводить все вручную, даже reservation_id, и тогда я могу подсчитать, какова общая цена заказа этой таблицы на эту дату.
Мне нужен reservation_id из бронирования, привязанного к зарезервированному столу в тот день, чтобы я знал, кто сделал какой заказ. Так что мне не нужно вводить его вручную.
Я просмотрел все из JOINS, Views и множественных операторов выбора, но я не могу понять это. Также пробовал внешние ключи, но это еще больше запутывает.
Что я пытаюсь выполнить: 1. Чтобы сделать и просмотреть резервирование и назначить таблицу (это работает) 2. Чтобы принять заказ и увидеть общую цену заказа таблицы -> с reservation_id (и датой) (это работает, но только когда я ввожу reservation_id вручную в sql.)
Ниже то, что я уже создал. Вы видите, что я почти закончил. Просто нужно, чтобы этот последний запрос работал, и я был бы очень рад узнать, что я делаю неправильно.
Моя база данных:
MenuItem:
MenuItemID int(11)
ItemName varchar(255)
ItemPrice double
orders:
OrderID int(11)
MenuItemID int(11)
ReceiptID int(11)
Res_Datum date
Tafel_Id int(11)
Res_ID int(11)
receipt:
ReceiptID int(11)
ReceiptPrice double
reserveringen:
Reservering_Id int(11)
Tafel_Id int(11)
VoorNaam varchar(255)
AchterNaam varchar(255)
TelefoonNummer varchar(255)
Email varchar(255)
Res_Datum date
Ниже я добавлю два моих php файла для создания заказа Если вы скопируете и вставите код из двух форм и используете одно и то же имя, вы сможете воссоздать его.
Bestelling.php:
<form action = "/restaurant/maak_bestelling.php" method = "POST">
<h2>Enter Order</h2>
Table Number:<br>
<input type = "text" name = "tafelnummer" value = ""><br><br>
Receipt Id:<br>
<input type = "text" name = "receiptid" value = ""><br><br>
Menu_Item:<br>
<input type = "text" name = "menu_item" value = ""><br><br>
Date: <br>
<input type = "date" name = "date" value = ""><br><br>
<input type = "submit" value = "Submit">
</form>
<h2>Pending Orders:</h2>
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "restaurant";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
//MY Query i am trying to run
// $sql = "SELECT O.Res_Datum, R.Reservering_Id, O.Tafel_Id,O.ReceiptID, SUM(MI.ItemPrice) AS TotalReceiptPrice
// FROM Orders, Reserveringen AS O INNER JOIN MenuItem AS MI ON O.MenuItemID = MI.MenuItemID
// AS O LEFT JOIN Reservering_Id AS R on O.Reservering_Id = R.reservering_Id
// GROUP BY O.Res_Datum, O.Res_ID, O.Tafel_Id ";
//The statement I get with an Empty reservation_ID
$sql = "SELECT O.Res_Datum, O.Res_ID, O.Tafel_Id,O.ReceiptID, SUM(MI.ItemPrice) AS TotalReceiptPrice
FROM Orders AS O INNER JOIN MenuItem AS MI ON O.MenuItemID = MI.MenuItemID
GROUP BY O.Res_Datum, O.Res_ID, O.Tafel_Id ";
$result = $conn->query($sql);
if (mysqli_num_rows($result) > 0) {
// output data of each row
while($row = mysqli_fetch_assoc($result)) {
echo "Res_datum: ". $row["Res_Datum"]. " ReservationID : " . $row["Res_ID"]. " - Table_Number: " . $row["Tafel_Id"]. " Total Order Price: " . $row["TotalReceiptPrice"]." ". "<br>";
}
} else {
echo "0 results";
}
mysqli_close($conn);
?>
</div>
maak_bestelling.php :
<?php
$con = mysqli_connect('localhost','root','');
if (!$con) {
echo 'Not connected with server';
}
if (!mysqli_select_db ($con,'restaurant')) {
echo 'Database Not selected';
}
$tablenumber = $_POST['tafelnummer'];
$receiptid = $_POST['receiptid'];
$menu_item = $_POST['menu_item'];
$date = $_POST['date'];
$sql = "INSERT INTO Orders (orders.Tafel_Id, orders.ReceiptID, orders.MenuItemID, orders.Res_Datum )
VALUES ('$tablenumber', '$receiptid', '$menu_item', '$date')";
if (!mysqli_query($con,$sql)){
echo 'insert did not work';
}else {
echo 'Order created successfully';
}
header("refresh:1; url=bestelling.php");
?>
У меня есть еще два файла для создания брони, Форма выглядит следующим образом, возможно, вы хотите произвести впечатление:
<form action = "/restaurant/maak_reservering.php" method = "POST">
Voornaam:<br>
<input type = "text" name = "voornaam" value = ""><br><br>
Achternaam:<br>
<input type = "text" name = "achternaam" value = ""><br><br>
Email:<br>
<input type = "text" name = "email" value = ""><br><br>
Telefoonnummer:<br>
<input type = "text" name = "telefoonnummer" value = ""><br><br>
Tafel:<br>
<input type = "text" name = "tafel" value = ""><br><br>
Reserverings Datum:<br>
<input type = "date" name = "datum" value = "dd//mm//yy"><br><br>
<input type = "submit" value = "Submit">
</form>
<div id = "Tafels">
<h3>Gereserveerde Tafels</h3>
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "restaurant";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// $sql = "SELECT reserveringen.Tafel_Id, reserveringen.Res_Datum
// FROM reserveringen
// INNER JOIN tafels ON reserveringen.Tafel_Id=tafels.Tafel_Id";
// $result = $conn->query($sql);
//andere query welke ik heb geprobeerd met reservering nummer
//tafels.tafel_Nummer,reserveringen.Res_Datum,reserveringen.Reservering_Id FROM tafels INNER JOIN reserveringen ON reserveringen.Res_Datum = reserveringen.Res_Datum AND reserveringen.Reservering_Id = reserveringen.Reservering_Id
//$sql = "SELECT tafels.tafel_Nummer,reserveringen.Res_Datum,reserveringen.Reservering_Id FROM tafels LEFT JOIN reserveringen ON reserveringen.Res_Datum = reserveringen.Res_Datum AND reserveringen.Reservering_Id = reserveringen.Reservering_Id";
$sql = "SELECT Reservering_Id, Tafel_Id, Res_Datum, VoorNaam, AchterNaam FROM reserveringen ORDER BY Res_Datum DESC";
$result = $conn->query($sql);
if (mysqli_num_rows($result) > 0) {
// output data of each row
while($row = mysqli_fetch_assoc($result)) {
echo "reserveringID: ". $row["Reservering_Id"]. " tafelnummer: " . $row["Tafel_Id"]. " - Reservering_datum: " . $row["Res_Datum"]. " " . $row["VoorNaam"]." ".$row["AchterNaam"]. " ". "<br>";
}
} else {
echo "0 results";
}
mysqli_close($conn);
Мне просто нужен идентификатор квитанции со связанной таблицей на эту дату, ничего больше.
Я не понимаю, зачем вам связывать заказы с бронированиями. Что имеет значение (обычно), так это то, какой стол заказал что, а не то, кто забронировал столик для заказа начос.






Бронирование и назначенные столы:
select
reserveringen.Reservering_Id
, orders.Tafel_Id
from reserveringen
inner join orders on orders.Res_ID = reserveringen.Reservering_Id
inner join MenuItem on MenuItem.MenuItemID = orders.MenuItemID
inner join receipt on receipt.ReceiptID = orders.ReceiptID
Заказ, стол, резервация и сумма цены пункта меню:
select
orders.OrderID
, reserveringen.Reservering_Id
, orders.Tafel_Id
, sum(MenuItem.ItemPrice) as sum
from reserveringen
inner join orders on orders.Res_ID = reserveringen.Reservering_Id
inner join MenuItem on MenuItem.MenuItemID = orders.MenuItemID
inner join receipt on receipt.ReceiptID = orders.ReceiptID
where orders.OrderID = ? --insert the OrderID
group by
orders.OrderID
, reserveringen.Reservering_Id
, orders.Tafel_Id
Это прекрасно, за исключением того, что я забыл, что не использую таблицу Tafels. Как бы я это сделал, потому что, когда я меняю запрос, все разваливается. я обновил свой вопрос
select orders.OrderID ,reservingen.Reservering_Id ,reservingen.Tafel_Id ,sum(MenuItem.ItemPrice) как сумма из резервирования внутренних заказов на соединение по заказам.Res_ID = backupingen.Reservering_Id внутреннее соединение MenuItem на MenuItem.MenuItemID = заказы.MenuItemID внутреннее получение соединения при получении .ReceiptID = заказы.ReceiptID внутреннее соединение резервирования на резервирование.Tafel_Id = группы заказов.Tafel_Id по заказам.OrderID , backupingen.Reservering_Id , tafels.Tafel_Id
замените tafels.Tafel_Id на orders.Tafel_Id (я отредактировал ответ)
Все еще получаю 0 результатов, он должен быть зарезервирован.Tafel_Id, который я ищу И зарезервирован.Reservering_Id
Прочтите о SQL-инъекция. Вместо построения запросов с конкатенацией строк используйте подготовленные заявления с связанные параметры. См. эта страница и эта почта для некоторых хороших примеров.