За последние 24 часа нас посетили 19570 программистов и 1633 робота. Сейчас ищут 1866 программистов ...

MySQL. Вывод списка заказов покупателей

Тема в разделе "PHP и базы данных", создана пользователем komplekt_17, 29 апр 2016.

Метки:
  1. komplekt_17

    komplekt_17 Новичок

    С нами с:
    18 окт 2014
    Сообщения:
    6
    Симпатии:
    1
    Всем здрасьте, пробежался по темам, вроде ничего похожего не нашёл, может, не там смотрел.
    В общем, проблема такая
    есть 4 таблицы:
    shoppers - покупатели,
    [​IMG]
    products - товары,
    [​IMG]
    orders - заказы,
    [​IMG]
    status_orders - статусы заказов
    [​IMG]
    необходимо вывести список заказов покупателя в таком виде:
    HTML:
    1. <tbody class='tbody'>
    2. <th>Номер заказа</th>
    3. <th>Дата заказа</th>
    4. <th>Сумма заказа</th>
    5. <th>Статус заказа</th>
    делаю такие запросы:
    PHP:
    1. // выборка покупателя
    2.     $user_name = $_SESSION['Login'];
    3.     $sql1 = "SELECT id_sh FROM shoppers WHERE login_sh = '$user_name'";
    4.     $result1 = mysqli_query($db, $sql1);
    5.     $myrow1 = mysqli_fetch_assoc($result1);
    6. // выборка всех позиций по заказам покупателя
    7.     $user_id = $myrow1['id_sh'];
    8.     $sql2 = "SELECT * FROM orders WHERE shr_ord = '$user_id'";
    9.     $result2 = mysqli_query($db, $sql2);
    10. if (mysqli_num_rows($result2)>0){
    11. // вывод нецикличной части
    12.         echo "
    13.                  
    14. <tbody class='tbody'>
    15. <th>Номер заказа</th>
    16. <th>Дата заказа</th>
    17. <th>Сумма заказа</th>
    18. <th>Статус заказа</th>
    19. </tbody>
    20. ";
    21. // запускаю цикл по условию
    22.         while($myrow2 = mysqli_fetch_array($result2)){
    23.             $num_ord = $myrow2['num_ord'];
    24. // выбираю только позиции   из конкретного заказа      
    25.             $sql3 = "SELECT * FROM orders WHERE num_ord = '$num_ord'";
    26.             $result3 = mysqli_query($db, $sql3);
    27.             $myrow3 = mysqli_fetch_array($result3);
    28. // выбираю цену позиций в заказе          
    29.             $prod_ord = $myrow3['prod_ord'];
    30.             $sql4 = "SELECT price_pd FROM products WHERE id_pd = '$prod_ord'";
    31.             $result4 = mysqli_query($db, $sql4);
    32.             $myrow4 = mysqli_fetch_array($result4);
    33. // вывод цикличной части
    34.             echo "
    35.                        <tr>
    36.                            <td>".$myrow3['num_ord']."</td>
    37.                            <td>".$myrow3['date_ord']."</td>
    38.                            <td>".$myrow3['qwt_ord']*$myrow4['price_pd']." ".$val."</td>
    39.                            <td>".$myrow3['stat_ord']."</td>
    40.                        </tr>";
    41.            
    42.         }
    здесь застрял, как дальше????
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Посмотри JOIN чтобы сразу выбрать из нескольких таблиц и обойтись одним циклом и одним запросом.
     
  3. komplekt_17

    komplekt_17 Новичок

    С нами с:
    18 окт 2014
    Сообщения:
    6
    Симпатии:
    1
    да, JOIN здесь, наверное, по-корректнее использовать, но это для меня пока сложновато, помогите составить единый запрос к 4-м таблицам.
    --- Добавлено ---
    Вопрос снят, решение такое:
    PHP:
    1. $sql = "SELECT `num_ord`,
    2.               `date_ord`,
    3.               SUM(`qwt_ord`*`price_pd`) AS `price`,
    4.               `name_stord`
    5.        FROM `shoppers`
    6.        LEFT JOIN `orders`
    7.        ON `id_sh`=`shr_ord`
    8.        LEFT JOIN `products`
    9.        ON `prod_ord`=`id_pd`
    10.        LEFT JOIN `status_orders`
    11.        ON `id_stord`=`stat_ord`
    12.        WHERE `login_sh`='$user_name'
    13.        AND `id_ord` IS NOT NULL
    14.        GROUP BY `num_ord`
    15.        ORDER BY `id_ord` ASC";
    16. $order_sql   = mysqli_query($db, $sql);
    17. $order_array = mysqli_fetch_all($order_sql, MYSQL_ASSOC);
    18.  
    19. print '<table>
    20.         <tbody class="tbody">
    21.           <tr>
    22.             <th>Номер</th>
    23.             <th>Дата</th>
    24.             <th>Сумма</th>
    25.             <th>Статус</th>
    26.           </tr>';
    27.  
    28. foreach ($order_array as $order)
    29. {
    30.     print '<tr>
    31.             <td>' . $order['num_ord'] . '</td>
    32.             <td>' . $order['date_ord'] . '</td>
    33.             <td>' . $order['price'] . ' ' . $val . '</td>
    34.             <td>' . $order['name_stord'] . '</td>
    35.           </tr>';
    36. }
    37.  
    38.  
    39.   '</table>';
    всем спасибо за внимание, тему можно закрывать