2017-08-03 44 views
1

我需要如何編輯我的數據庫我建立1快餐爲了網站帶走客戶,此刻在我的結構的一些想法用戶將有物品進入順序表數據庫結構對於訂單

這裏是它的表:http://prntscr.com/g3o3kz

user_id列是爲訂購id的用戶存儲,然後item id是他們想要的東西takeawayid是外賣的id和狀態是他們訂購食品其自動設置爲等待,然後拿走可以將其更新爲接受或拒絕。

現在我遇到的問題是用戶添加5個項目到上面的表中拿走ID 1將有5行爲用戶ID並帶走ID和項目ID(有5項)

現在我到最近的訂單頁面,並打印出了每種帶走所以像這樣

http://prntscr.com/g3o4uw

但隨後明天,如果他們爲了它將再增加5項,它會在顯示同一個盒子如何將每個訂單分組?因此,1號有xyz項目,然後下次order2有xyz等等。因爲此刻的方式,數據庫奠定了它只是全部,如果這是有道理的

顯示訂單箱

<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; 
} 

,我會需要一個額外的列order1也許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(); 

本課程的完美的作品,因爲舊的訂單將被醚接受或拒絕這樣的等待狀態的將是當前的。我只是很難打印出舊訂單並將它們組合在一起

回答

3

瞭解如何爲您的數據庫實現third normal form

這個神奇的短語僅僅意味着如果你有東西可能被孤立爲一個實體 - 爲它創建一個單獨的表。 MySQL foreign key examples (How to define foreign keys in MySQL)

解開使用合適的工具你的想象力:

你的情況應該有1臺訂單和1個表項,表將與foreign keys,這在MySQL作爲該文章中說是由被連接我建議您使用MySQL Workbench這將幫助您在設計數據庫時可視化結構。它可能是一個「從麻雀大炮」的方法在你的特定情況下,但一定會有助於迅速提高你的技能在未來。

最後回答你的問題詳細

  1. idnameprice字段創建items表。它將包含的產品清單您所提供給用戶的

    id將與自動遞增屬性主鍵

  2. idname領域

    id創建users表將與自動遞增的主鍵property

  3. 創建ordersiduser_id字段

    id將與自動遞增屬性主鍵

    user_id將有外鍵與用戶錶鏈接

  4. 創建order_itemsidorder_idpricequantity領域

    id會帶自動增量屬性的主鍵

    order_id將與訂單錶鏈接的外鍵

    item_id將有外鍵的項目表鏈接

我不明白什麼地址和日期字段是,如此然後附加到上市相應的表以上。

因此,您將獲得每個用戶的訂單清單,其中列出了與價目表相關的訂購內容。您將能夠一次從所有表中選擇所有連接的數據,或者將數據的一部分顯示給用戶或您。

這裏最棒的是ID不再有問題。

+0

我有一個項目表http://prntscr.com/g3og1h我正在嘗試使用像strutce論壇被拿走可以使一個像比薩餅類別然後有所有不同的比薩餅裏面的主題,所以我使用類別表和一個主題表:) – shadow

+0

那麼,想法不會改變,方法是我上面描述的相同) – iXCray