За последние 24 часа нас посетили 22926 программистов и 1234 робота. Сейчас ищет 771 программист ...

Создание формы сортировки и вывод из базы данных цен

Тема в разделе "PHP для новичков", создана пользователем kuzmich, 16 сен 2019.

  1. kuzmich

    kuzmich Активный пользователь

    С нами с:
    6 мар 2017
    Сообщения:
    39
    Симпатии:
    0
    Всем привет!

    Делаю форму для сортировки и проблема с выводом минимальной и максимальной цены.

    Вся проблема в том, что вывод цен в тысячном эквиваленте все хорошо работает, а вот в сотом эквиваленте работает не верно.


    Привожу запросы и результаты запросов, и вывод результатов:
    Код (Text):
    1. SELECT `PRICE` FROM `goods` WHERE `section`='Кабель в гофре' ORDER BY `price` ASC
    2. SELECT `PRICE` FROM `goods` WHERE `section`='Кабель в гофре' ORDER BY `price` DESC
    [​IMG] [​IMG] [​IMG]
    Как видите тут все хорошо работает. Теперь переходим во второй раздел смотрим:
    Код (Text):
    1. SELECT `PRICE` FROM `goods` WHERE `section`='Шаблоны для сверления' ORDER BY `price` ASC
    2. SELECT `PRICE` FROM `goods` WHERE `section`='Шаблоны для сверления' ORDER BY `price` DESC
    [​IMG] [​IMG] [​IMG]
    Понять не могу, почему они местами поменялись цифры? В PHPMyAdmin все работает изумительно, а вот вывод на форме не корректно.

    Вот код самой формы для сортировки:
    PHP:
    1. <?php
    2. $msection_db = mysql_query("select * from `section` where `mtitle`='".$msection."'",$db);
    3. if (!$msection_db)
    4. {
    5. echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>";
    6. }
    7. if (mysql_num_rows($msection_db) > 0){
    8. $msection_db_row = mysql_fetch_array($msection_db);}
    9.  
    10.     $min_price_db = mysql_query("SELECT `price` FROM `goods` WHERE `section`='".strip_tags($msection_db_row['title'])."' ORDER BY `price` ASC ",$db);
    11.     if (!$min_price_db)
    12.     {
    13.     echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>";
    14.     exit(mysql_error());
    15.     }
    16.     if (mysql_num_rows($min_price_db) > 0){
    17.     $min_price_db_row = mysql_fetch_array($min_price_db);
    18.     }
    19.    
    20.     $max_price_db = mysql_query("select `price` from `goods` where `section`='".strip_tags($msection_db_row['title'])."' order by `price` desc",$db);
    21.     if (!$max_price_db)
    22.     {
    23.     echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>";
    24.     exit(mysql_error());
    25.     }
    26.     if (mysql_num_rows($max_price_db) > 0){
    27.     $max_price_db_row = mysql_fetch_array($max_price_db);}
    28. ?>
    29.  
    30. <div class='sort'>
    31. <?php
    32. if (!isset($msection)) {}
    33. else {
    34.     $type_sort_db = mysql_query("select * from `type-sort`",$db);
    35.     if (!$type_sort_db)
    36.     {
    37.     echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>";
    38.     exit(mysql_error());
    39.     }
    40.     if (mysql_num_rows($type_sort_db) > 0){
    41.     $type_sort_db_row = mysql_fetch_array($type_sort_db);
    42.     echo "<form action='../../section/?msection=".$msection."' method='get'><input type='hidden' name='msection' value='".$msection."'>";
    43.     do
    44.     {
    45.         $sort_db = mysql_query("select * from `sort` where `msection`='".$msection."' and `type`='".$type_sort_db_row['title']."'",$db);
    46.         if (!$sort_db)
    47.         {
    48.         echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>";
    49.         exit(mysql_error());
    50.         }
    51.         if (mysql_num_rows($sort_db) > 0){
    52.         $sort_db_row = mysql_fetch_array($sort_db);
    53.         echo "
    54.        <div class='sort_title'><strong>".$type_sort_db_row['title']."</strong></div>
    55.         <div class='sort_radio'>
    56.         <ul>
    57.        ";
    58.         do
    59.         {
    60.         echo "<li><input type='radio' name='".$type_sort_db_row['variable']."' value='".$sort_db_row['title']."'>".$sort_db_row['title']."</li>";
    61.         }
    62.         while ($sort_db_row = mysql_fetch_array($sort_db));
    63.         echo "
    64.         </ul></div>
    65.        ";
    66.         }
    67.     }
    68.     while ($type_sort_db_row = mysql_fetch_array($type_sort_db));
    69.     echo "
    70.    <div class='sort_title'><strong>Рознечная цена</strong></div>
    71.    <div align='center'>От <input type='text' name='price_one' style='width:39.5%;' value='".$min_price_db_row['price']."'> до <input type='text' name='price_two' style='width:39.5%;' value='".$max_price_db_row['price']."'></div>
    72.    <div align='center'><input type='submit' value='Показать' style='margin:0.5vw; border:0; background:#E82C31; color:#FFFFFF; padding:10px 20px;'></div></form>
    73.    ";
    74.     }
    75.     else
    76.     {}
    77. }
    78. ?>
    79. </div>
    Подскажите в чем может быть проблема?
    Заранее благодарю за помощь!
     
  2. sushko

    sushko Новичок

    С нами с:
    17 июл 2019
    Сообщения:
    78
    Симпатии:
    8
    Из Ваших примеров SQL-запросов и их аутпута я предполагаю, что у Вас большинство полей таблиц БД объявлены как строки. В этом случае mySQL тоже сортирует их как строки, а не как числа, и тогда набор строк "1" "2" "10" будет отсортирован так: "1", "10", "2", а набор строк "176" "1750" будет отсортирован так: "1750" "176".
     
  3. kuzmich

    kuzmich Активный пользователь

    С нами с:
    6 мар 2017
    Сообщения:
    39
    Симпатии:
    0
    @sushko, спасибо, разобрался. у меня столбец price был как varchar. переделал в int и все заработало
     
  4. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    учитывая, что столбец с ценой должен быть double, то не так уж и сильно ты разобрался ;)
     
  5. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    А учитывая, что он должен быть INT или DECIMAL, вы тоже.