订单的数据库结构

时间:2017-08-03 00:46:03

标签: php database pdo

我需要一些关于如何在我的数据库中编辑我的结构的想法我正在建立一个快餐订单网站,用于在用户将项目添加到订单表中时将1个带走的客户端

以下是表格:http://prntscr.com/g3o3kz

user_id列是针对订购ID的用户,然后项目ID是他们想要的内容物品是带走的ID,状态是他们订购食物的自动设置等待然后带走可以将其更新为接受或拒绝。

现在我遇到的问题是用户在上面的表格中添加了5个项目,用于取走ID 1,用户ID将有5行并带走id和item id(有5个项目)

现在我进入了最近的订单页面,我打印出所有每个带走的东西,所以

http://prntscr.com/g3o4uw

但是明天,如果他们订购它将添加另外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();

这当然是完美的,因为旧订单将被接受或拒绝,因此等待状态将是当前订单。我发现很难打印旧订单并将它们组合在一起

1 个答案:

答案 0 :(得分:3)

了解如何为您的数据库实现third normal form

这个神奇的短语只是意味着如果你有东西可能被隔离为一个实体 - 为它创建一个单独的表。

在你的情况下,应该有1个表用于订单,1个表用于项目,表格将与foreign keys连接,在Mysql中按照该文章中的说明进行:MySQL foreign key examples (How to define foreign keys in MySQL)

要使用适当的工具解开您的想象,我建议您使用MySQL Workbench,这将帮助您在设计数据库时可视化数据库结构。在您的特定情况下,它可能是“从麻雀大炮”的方法,但肯定有助于在未来快速提升您的技能。

最后详细回答您的问题

  1. 使用itemsidname字段创建price表格。它将包含您向用户提供的项目列表

    id将是具有自动增量属性的主键

  2. 使用usersid字段创建name

    id将是具有自动增量属性的主键

  3. 使用ordersid字段创建user_id

    id将是具有自动增量属性的主键

    user_id将具有与用户表链接的外键

  4. 使用order_itemsidorder_idprice字段创建quantity

    id将是具有自动增量属性的主键

    order_id将具有与订单表链接的外键

    item_id将具有与项目表链接的外键

  5. 我无法理解地址和日期字段的用途,因此请将其附加到上面列出的相应表格中。

    因此,您将拥有每个用户的订单列表,其中列出了与price-list连接的内部订购商品。您可以一次性选择所有表中的所有联接数据,也可以将一部分数据显示给用户或您。

    这里最棒的是ID不再有问题。