我需要一些关于如何在我的数据库中编辑我的结构的想法我正在建立一个快餐订单网站,用于在用户将项目添加到订单表中时将1个带走的客户端
以下是表格:http://prntscr.com/g3o3kz
user_id
列是针对订购ID的用户,然后项目ID是他们想要的内容物品是带走的ID,状态是他们订购食物的自动设置等待然后带走可以将其更新为接受或拒绝。
现在我遇到的问题是用户在上面的表格中添加了5个项目,用于取走ID 1,用户ID将有5行并带走id和item id(有5个项目)
现在我进入了最近的订单页面,我打印出所有每个带走的东西,所以
但是明天,如果他们订购它将添加另外5个项目,它将在同一个框中显示我将如何对每个订单进行分组?因此,订单1具有xyz项目,然后订单order2具有xyz,依此类推。因为目前数据库的布局方式如果这是有意义的话,它将只是order1
显示订单框
<div class="container" style="margin-top: 40px;">
<div class="row">
<div class="col-xs-12">
<?php
echo $_SESSION['username'] ;
foreach ($ordersByUsers as $userId => $item) {
$username = $item['username'];
$ordersPrice = $item['ordersPrice'];
$orders = $item['orders'];
?>
<div class="row">
<div class="col-xs-12 col-md-10" style="background-color: #FAFAF8; border: 1px solid #ddd; padding: 20px; margin-bottom: 20px;">
<div class="row" style="padding: 20px;">
<div class="col-xs-12 col-sm-3">
<div class="row">
<a href="#">
<img src="http://santetotal.com/wp-content/uploads/2014/05/default-user.png" class="img-responsive" alt="Restaurant logo" height="92" width="102">
</a>
</div>
<div class="row" style="padding-top: 10px;">
<a href="#" style="text-transform: uppercase;">
<a href="#" style="text-transform: uppercase;"> </a>
<?php echo $username; echo "<br> </br>";
?>
<?php
/////////// get status of order
$statement8 = $db->prepare("SELECT * FROM users WHERE username = ? ");
$statement8->execute(array($_SESSION['username']));
$count8 = $statement8->fetch();
$username233 = mysql_real_escape_string($count8['id']);
$username2312312 = strip_tags($username233);
$statement85 = $db->prepare("SELECT * FROM orders WHERE user_id = ? AND takeawayid = ? ");
$statement85->execute(array($username2312312,$_SESSION['userid']));
$count84 = $statement85->fetch();
if($count84 ['status']== "waiting") {
?>
<form action="dashboard.php" method="post">
<input type="hidden" name="accept" value="<?php echo $count84['id']?>">
<input type="image" name="submit" src="http://business.fsdfsdfsdf.com/beta/accept.png" border="0" alt="Submit" />
</p>
</form>
<form action="dashboard.php" method="post">
<input type="hidden" name="deny" value="<?php echo $count84['id']?>">
<input type="image" name="submit" src="http://business.sdfsdfdf.com/beta/deny.png" border="0" alt="Submit" />
</p>
</form>
<?php
}elseif ($count84 ['status']== "Accepted") {
echo "<img src='http://business.sfdfsdfsdf.com/beta/accepted.png' alt='error'>";
} else {
echo "<img src='http://business.sdfdsfsdfsdf.com/beta/declined.png' alt='error'>" ;
}
?>
</a>
</div>
</div>
<div class="col-xs-12 col-sm-9">
<?php
foreach ($orders as $order) {
$orderId = $order['orderId'];
$itemname = $order['itemname'];
$price = $order['price'];
$date = $order['date'];
$address = $order['address'];
?>
<div class="row">
<div class="col-xs-12" style="background-color: #FFF; border: 1px solid #ddd; padding: 20px; margin-bottom: 20px;">
<h4>
<a href="profile.html" style="color: orange;">
<?php echo $itemname; ?>
</a>
</h4>
<div>
<div>
<span>
<?php echo $date; ?>
</span>
</div>
<div class="ratings">
<span>5 STARS</span>
</div>
</div>
</div>
Address: <b> <?php echo $address; ?></b>
</div>
<?php
}
?>
</div>
</div>
</div>
<div class="col-xs-12 col-md-2" style="padding: 20px; padding-top: 40px; font-size: 20px; color: #666; text-transform: uppercase;">
Total: <?php echo $ordersPrice; ?>
</div>
</div>
<?php
}
?>
查询
function fetchPaidOrdersByTakeaway($connection, $takeawayId, $paid) {
if (!isset($takeawayId)) {
throw new Exception('Takeaway ID not provided!');
}
if (!isset($paid)) {
throw new Exception('Paid not provided!');
}
// Sql statement.
$sql = 'SELECT
ord.id AS orderId,
usr.id AS userId,
usr.username,
ord.itemname,
ord.address,
ord.price,
ord.date
FROM orders AS ord
LEFT JOIN users AS usr ON usr.id = ord.user_id
WHERE
user_id = :takeawayid
AND paid = :paid
ORDER BY
usr.username ASC,
ord.date DESC';
// Prepare and check sql statement (returns PDO statement).
$statement = $connection->prepare($sql);
if (!$statement) {
throw new Exception('The SQL statement can not be prepared!');
}
// Bind values to sql statement parameters.
$statement->bindValue(':takeawayid', $_SESSION['userid'], getInputParameterDataType($_SESSION['userid']));
$statement->bindValue(':paid', $paid, getInputParameterDataType($paid));
// Execute and check PDO statement.
if (!$statement->execute()) {
throw new Exception('The PDO statement can not be executed!');
}
// Fetch data.
$fetchedData = $statement->fetchAll(PDO::FETCH_ASSOC);
if ($fetchedData === FALSE) {
throw new Exception('Fetching data failed!');
}
return $fetchedData;
}
/**
* Group orders by users.
*
* @param array $orders [optional] Orders list.
* @return array Orders list grouped by users.
* @throws Exception
*/
function groupOrdersByUsers(array $orders = array()) {
$groupedOrders = array();
foreach ($orders as $order) {
$userId = $order['userId'];
$username = $order['username'];
$price = $order['price'];
// Check and add user name as key, if not already.
if (!array_key_exists($userId, $groupedOrders)) {
$groupedOrders[$userId] = array(
'username' => $username,
'orders' => array(),
'ordersPrice' => 0,
);
}
// Add order to grouped orders list.
$groupedOrders[$userId]['orders'][] = $order;
$groupedOrders[$userId]['ordersPrice'] += $price;
}
return $groupedOrders;
}
我需要一个额外的列可能orderid然后让所有订单具有相同的ID然后通过订单ID显示每个?问题是为订单内的每个项目添加相同的数字然后下一个订单添加一个新的数字而不是2相同的数字
编辑 目前我在那里展示了这样的推车
$statement = $db->prepare("SELECT * FROM orders WHERE user_id = ? AND status = ? AND takeawayid = ? ");
// $statement->execute(array($username2,$md5password,$mod));
$statement->bindParam(1, $_SESSION['userid'], PDO::PARAM_STR, 50); // check your lengths
$statement->bindParam(2, $testing, PDO::PARAM_STR, 60);
$statement->bindParam(3, $id1, PDO::PARAM_INT);
$statement->execute();
这当然是完美的,因为旧订单将被接受或拒绝,因此等待状态将是当前订单。我发现很难打印旧订单并将它们组合在一起
答案 0 :(得分:3)
了解如何为您的数据库实现third normal form。
这个神奇的短语只是意味着如果你有东西可能被隔离为一个实体 - 为它创建一个单独的表。
在你的情况下,应该有1个表用于订单,1个表用于项目,表格将与foreign keys连接,在Mysql中按照该文章中的说明进行:MySQL foreign key examples (How to define foreign keys in MySQL)
要使用适当的工具解开您的想象,我建议您使用MySQL Workbench,这将帮助您在设计数据库时可视化数据库结构。在您的特定情况下,它可能是“从麻雀大炮”的方法,但肯定有助于在未来快速提升您的技能。
最后详细回答您的问题
使用items
,id
和name
字段创建price
表格。它将包含您向用户提供的项目列表
id
将是具有自动增量属性的主键
使用users
和id
字段创建name
表
id
将是具有自动增量属性的主键
使用orders
和id
字段创建user_id
表
id
将是具有自动增量属性的主键
user_id
将具有与用户表链接的外键
使用order_items
,id
,order_id
和price
字段创建quantity
表
id
将是具有自动增量属性的主键
order_id
将具有与订单表链接的外键
item_id
将具有与项目表链接的外键
我无法理解地址和日期字段的用途,因此请将其附加到上面列出的相应表格中。
因此,您将拥有每个用户的订单列表,其中列出了与price-list连接的内部订购商品。您可以一次性选择所有表中的所有联接数据,也可以将一部分数据显示给用户或您。
这里最棒的是ID不再有问题。