Cортировка результатов

Европа - быстрые серверы на дисках NVMe от $5 / Русский датацентр от 199руб

Тема в разделе "PHP и базы данных", создана пользователем almaz, 9 ноя 2018.

  1. almaz

    almaz Новичок

    Сообщения:
    29
    Ваш город:
    Москва, Россия
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Имеется код:
    PHP:
    $result mysqli_query($db"SELECT * FROM `test_tbl` ORDER BY `dmg` DESC LIMIT 30");

    foreach (
    $result as $row) {
        echo 
    "<tbody><tr><td>".$row['num']."</td><td>".$row['name']."</td><td>".$row['dmg']."</td></tr></tbody>";
    }
    В запросе происходит сортировка по столбцу dmg. Мне нужно сделать чтобы сортировка в запросе не касалась столбца num, потому как у меня на выходе получается:

    PHP:
    22      PETR    244578
    18      DIMA    189623
    74      Oleg    163091
    118     VIKTOR  132381
    1380    KTO 
    ?   118807
    60      Olga    103181
    ...
    мне же нужно в конечном результате такой вид таблицы:
    PHP:
    1       PETR    244578
    2       DIMA    189623
    3       Oleg    163091
    4       VIKTOR  132381
    5       KTO 
    ?   118807
    6       Olga    103181
    ...
    Просто заменить первый столбец счетчиком не вариант, т.к у меня есть еще пагинация, которая будет ломать счетчик, что нужно будет еще костылить. Подскажите пожалуйста новичку может как-то можно все-таки изящно все сделать в моем варианте?
     
    Последнее редактирование: 9 ноя 2018
  2. Adelf

    Adelf Laravel&PhpStorm Команда форума

    Сообщения:
    3.329
    Ваш город:
    Казань
    Address:
    Kazan, Russia
    Country:
    Location on Map:
    пагинация? это наверно невероятно сложно посчитать номер строчки при пагинации?
     
  3. almaz

    almaz Новичок

    Сообщения:
    29
    Ваш город:
    Москва, Россия
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Вопрос в другом, можно ли как-то обойтись без этого т.к я написал что хотелось бы "почище чтоль" код.
    Я имел виду, может в запросе реально исключение сделать как-то. Или еще какие-то варианты.
     
  4. ksnk

    ksnk прохожий

    Сообщения:
    1.075
    Address:
    Sankt-Peterburg, Russia
    Country:
    Location on Map:
    Ну и что написано в запросе? Разве там есть сортировка по num ?

    Если нужно выводить номер строки, то и нужно выводить не ненужный num, а номер строки. Кроме foreach в php есть еще и просто for. Или можно отдельную переменную завести со счетчиком, инкрементировать ее каждый цикл...
     
  5. almaz

    almaz Новичок

    Сообщения:
    29
    Ваш город:
    Москва, Россия
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Все верно, там стоит сортировка по dmg (как мне и нужно), но мне нужно чтобы первый столбец num это не касалось. Сортировка в запросе в две стороны выдает не совсем то что нужно (там получается начинает сортировать вторую сторону уже из сделанной выборки первой сортировки)...

    ps пример того вида как мне нужно есть же в посте.
     
  6. ksnk

    ksnk прохожий

    Сообщения:
    1.075
    Address:
    Sankt-Peterburg, Russia
    Country:
    Location on Map:
    Паджинация - это что ? 30 записей на страницу? В каком месте до запроса доводится откуда начинать?
    PHP:
    $page=empty($_GET['page'])?0:(int)$_GET['page']-1// для простоты...
    $perpage=30;
    $cnt=$page*$perpage;
    $result mysqli_query($db"SELECT * FROM `test_tbl` ORDER BY `dmg` DESC LIMIT ".$cnt.",".$perpage); // паджинация !

    foreach ($result as $row) {
        echo 
    "<tbody><tr><td>".++$cnt."</td><td>".$row['name']."</td><td>".$row['dmg']."</td></tr></tbody>";
    }
    Это не оно ?
     
  7. almaz

    almaz Новичок

    Сообщения:
    29
    Ваш город:
    Москва, Россия
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Да про подобное я вкурсе. Просто думал можно как-то без костылей, именно запросом как-то решить.
     
  8. ksnk

    ksnk прохожий

    Сообщения:
    1.075
    Address:
    Sankt-Peterburg, Russia
    Country:
    Location on Map:
    В каком месте тут костыли ? В mysql нет функции row_number, так что вот там-то костыли и будут, имитировать номер с
    помощью переменных....