За последние 24 часа нас посетили 17776 программистов и 1283 робота. Сейчас ищут 1410 программистов ...

Необходимо осуществить сортировку выводимых данных

Тема в разделе "PHP и базы данных", создана пользователем mityaj, 4 июл 2012.

  1. mityaj

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

    С нами с:
    25 апр 2012
    Сообщения:
    8
    Симпатии:
    0
    Есть постраничный вывод данных из бд. Необходимо сделать сортировку по алфавиту и по датам прямо на странице. Как это лучше всего и проще сделать?

    Код (Text):
    1. $r = $_PAGING->get_page( 'SELECT * FROM material ORDER BY id_number DESC' );
    2. echo '<h2>Все материалы</h2>';
    3. echo '<table cellspacing=0px; class="material_show">';
    4. echo '<tr><td style="height:15px; background-color:#BED2F3"  colspan="6"></td></tr>';
    5. echo '<tr>
    6. <th style="width:25px">Код</th>
    7. <th style="width:60px">Дата</th>
    8. <th style="width:250px">Название</th>
    9. <th style="width:90px">Отдел <FORM action="sort1.</th>
    10. <th style="width:190px">Путь</th>
    11. <th style="width:100px">Исполнитель</th></tr>';
    12.  
    13. while($row = $r->fetch_assoc())
    14.  {
    15.         echo '<tr>';
    16.               echo '<td align="center">'.$row['id_number'].'</td>
    17.                     <td align="center">'.$row['date'].'</td>
    18.                     <td>'.$row['name'].'</td>
    19.                     <td>'.$row['section'].'</td>
    20.                     <td>'.$row['path'].'</td>
    21.                     <td>'.$row['executor'].'</td>';
    22.         echo '</tr>';      
    23. }
    24. echo '<tr><td style="height:15px; background-color:#BED2F3"  colspan="6"></td></tr>';
    25. echo '</table>';
     
  2. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.114
    Симпатии:
    1.244
    Адрес:
    там-сям
    "прямо на странице" это как, без перезагрузки? тогда рекомендую подключить jQuary и соответствующий плагин. гуглить "jquery plugin table sort"

    иначе: про SELECT... ORDER BY слышал?
     
  3. mityaj

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

    С нами с:
    25 апр 2012
    Сообщения:
    8
    Симпатии:
    0
    Слышал) Думаю сделать через option. Чтоб при выборе происходила перезагрузка и сортировка.
    в value буду передавать по какому столбцу сортировать
    Только не знаю как сделать чтоб сортировалось в двух направлениях (ASC, DESC)
     
  4. uorypm

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

    С нами с:
    3 мар 2012
    Сообщения:
    98
    Симпатии:
    0
    Здравствуйте, mityaj.
    Загоняйте данные в javascript-массив.
    Далее:
    или array.sort();
    или array.sort() и array.reverse().
     
  5. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.114
    Симпатии:
    1.244
    Адрес:
    там-сям
    mityaj, бросается в глаза, что ты вставил тег FORM в неудачное место. Теги не должны пересекаться. Не факт, что тебе вообще нужен form. Достаточно формировать правильную ссылку в теге A.
    Например GET-параметр sort будет отвечать за сортировку
    Код (Text):
    1. <a href="http"//mysite.com/page.php?sort=name,ASC">Имя</a>
    Вот тестовый пример:
    Код (PHP):
    1. <?php
    2. $default_sort = array('col' => 'name', 'dir' => 'ASC'); // значение по умолчанию
    3. $sort_columns = array('id', 'name', 'price'); // сортировка возможна только по этим столбцам
    4. $sort_directions = array('ASC', 'DESC'); // сортировка возможна только с этими словами
    5.  
    6. if (empty($_GET['sort']) ||
    7.     !preg_match('/(?P<col>\w+),(?P<dir>\w+)/', $_GET['sort'], $sort) ||
    8.     !in_array($sort['col'], $sort_columns) ||
    9.     !in_array($sort['dir'], $sort_directions)) {
    10.     $sort = $default_sort;
    11. }
    12.  
    13. echo "SELECT * FROM mytable ORDER BY {$sort['col']} {$sort['dir']}";
    14.  
    Надо быть очень осторожным вставляя параметры в текст SQL запроса. В данном случае мы явно проверяем через регулярку и in_array() что будут использованы только нужные слова и ничего лишнего!

    Добавлено спустя 2 минуты 28 секунд:
    Ну и плюс тебе надо формировать нужные ссылки в заголовках колонок. Если сортировка по текущей колонке уже есть, то в ссылку подставлять DESC вместо ASC. Это стандартный интуитивно-понятный подход в пользовательском интерфейсе: щелкая по колонке сортируешь в ту или обратную сторону.