Тваюмать! у тебя есть запрос. Его текст лежит в php переменной $sql. Совершенно неважно что конкретно в запросе. Что происходит в момент нажатия на название? в простейшем случае происходит переход по ссылке скрипт.php?field=название_поля_по_которому_кликнули&sort=$sort_из_php_скрипта дальше в скрипте ты проверяешь PHP: $field = isset($_GET['field']) && in_array($_REQUEST['field'], $fields) ? $_REQUEST['field'] : 'name'; $sort = isset($_GET['sort']) && $_REQUEST['sort'] == 'DESC' ? 'ASC' : 'DESC'; $sql .= " ORDER BY ".$field." ". $sort; все! все что требуется от тебя это либо при созаднии страницы делать названия полей ссылками соответствующего вида, либо ставить на них onclick(), в котором переходить по ссылке. Или сабмитить невидимую форму с хидден полями field и sort, причем sort заполняется переменной $sort при формировании страницы. Ах да. Данные приходят не из phpMyAdmin, они приходят из БД. В phpMyAdmin никаких твоих данных нет, не было и не бывает. 2Mete0 я немного изменил твою строку с $sort, чтобы приходило не желаемый порядок, а текущий, так ссылку формировать проще.
Можно сделать ещё проще, вообще без JavaScript, а значение передавать через <a href="....">. А значения href формировать в самом скрипте, вида href="script.php?field=field&sort=asc"
считаю необоснованным использование php в данном случае, и вообще, лишние обращения к серверу как таковые (где тут смайл с языком ) при конечных данных. все данные уже на стороне пользователя, обеспечить их сортировку в таблице - задача js.
Ну, можно и js. Кучей методов, включая самые извращенные. Можно, например, при формировании страницы заполнить данными массив строк типа [js] arr[1]="<tr><td>имя</td><td>фамилия</td><td>возраст</td></tr>"; arr[2]="<tr><td>имя</td><td>фамилия</td><td>возраст</td></tr>"; [/js] И по кнопке на onclick перерисовывать таблицу, выводя в нее этот массив то с начала то с конца. А можно попариться с DOM и менять местами ячейки таблицы. О, еще идея. Запихать каждую строку в отдельный див, сверстать все это абсолютным позиционированием и по нажатию на кнопку менять css с позиционированием дивов на обратное В общем извращаться долго можно
karakh ключевое слово: "попариться с DOM" (причем в легонькой его форме) на самом деле, париться долго не надо, как говориться - сел и сделал. ps: просто я написал когда-то такую фигню (на основе другой) не от праздной жизни. Есть такой продукт HP Service Desk. У них есть абсолютно убогий Java API (а другого и нет). Таблица (заявок в сервис деске) хоть и не большая, но засчет кривизны API генериться очень долго. Каждый раз после сортировки в таблице заставлять пользователя опять ждать не было возможности.
Да чем оно ключевое? Один из вариантов. А попариться потому что кроссбраузерность, а изменение DOM-дерева та еще задачка для демонстрации отличий всем-известного-броузера от нормы Впрочем, с css-способом париться придется еще больше. Если честно, я бы делал массивом. Дешево, надежно и практично, раз уж надо js-ом а не php.
Зачем всё усложнять? А что если JavaScript у пользователя выключен? Думаете БД загнется от такого запроса? Ужас.
От задачи зависит. От одного запроса БД не сдохнет. А от скольки сдохнет? Сидит три тысячи юзеров какой-нибудь игры типа линейки, и давят на кнопки, статистику смотрят и сверяют по часу в день но все в одно и то же время. Или 100к человек, поставивших деньги на что-то там смотрят ровно в 22:00 как изменились ставки. Или 20к участников интернет-конкурса смотрят результаты и сортируют то по городам, то по местам, то еще как. Если задача решена через sql запрос, то они дергают базу данных, а БД всегда самое узкое место. Если задача решена средствами php ($arr=mysql_fetch_array($result, MYSQL_NUM); и выдача страницы с выводом вверх или вниз массива $arr) то все они дергают php сервер. А если решение сделано через js, то каждый парит только свой браузер. Зато парят страшно, потому что 100к записей обрабатывать js-ом - это для врагов. Ну а еще трафик для кого-то важен...
Ужас... При таких загрузках, тут будет совсем другой подход И JS тут не поможет никак. У БД есть кеш... 100к записей выводить никто разом не станет. Вот об этом думать точно не стоит, экономия на спичках.
Оптимизировать нужно то, что тормозит, а не заниматься херней, создаёте себе лишние проблемы, почём зря. Темя себя исчерпала.
Mete0 1. оптимизировать нужно сразу, а не ждать когда потребуется. 2. причем тут кэш БД сервера? 3. tcp соединение по-твоему не требует никаких ресурсов сервера? 4. не говоря уже о прочих накладных расходах? например: можно почитать Citrix NetScaler - multiplexing tcp connections. А вообще, да, тему можно закрывать, каждый останется при своих (как обычно )
Итак, прошу прощения за то что тупил, все таки пару недель как сел за php и sql)) Посидел, почитал ваши сообщения и разобрался. Очень благодарен всем, кто учавствовал) Сортировка в несколько столбцов: Сначала заголовки столбцов: PHP: <table> . . . <th> <?php $sort = isset($_GET['sort']) && $_REQUEST['sort'] == 'DESC' ? 'ASC' : 'DESC'; echo ' <a href="browse.php?field=[b]Поле1[b]&sort='.$sort.'">Имя поля</a>'; ?> </th> . . . <th> <?php $sort = isset($_GET['sort']) && $_REQUEST['sort'] == 'DESC' ? 'ASC' : 'DESC'; echo ' <a href="browse.php?field=[b]ПолеN[b]&sort='.$sort.'">Имя поля</a>'; ?> </th> . . . </table> Далее sql запрос три строки: PHP: <?php sql=""; $fields = array('Поле1', ... ,'ПолеN'); $field = isset($_GET['field']) && in_array($_REQUEST['field'], $fields) ? $_REQUEST['field'] : 'name'; $sql .= " ORDER BY ".$field." ". $sort; ?> Вот может кому то, как мне, новичкам поможет. У профи хотелось еще спросить... Вот у меня допустим данных много, я разделил их с помощью показа на странице 10 строк. Имеются переключатели страниц, чтобы увидеть остальные данные. Как сделать так, чтобы при сортировке допустим по ASC и переключкении страницы, сортировка сохранялась ASC, а не переходила в какой то другой сорт.
можно хранить текущее поле и вид сортировки в сессии или просто в отдельной переменной и если она не пришла из $_GET то брать оттуда. А можно ссылку на следующие 10 страниц просто формировать по тому же принципу, что и ссылку сортировки, то есть HTML: <a href="'browse.php?field='.ПолеN.'&sort='.$sort.'&[b]skip=10[/b]'">Next</a>';
obsrv Еще вот вопрос, js-сортировка работает вроде тоже прекрасно, но сортирует только данный лист, на котором 10 записей. Как сделать, чтобы она всю базу сортировала, а не отображаемый лист? В самой js-ке надо ковыряться?
RelictX придётся загружать всю информацию, и уже с помощью JS разбивать по страницам/сортировать и показывать только нужное плюс тут в том, что достаточно один раз загрузить все данные.. минус в том, что данных может быть очень много
Еще по поводу сортировки возникла проблемка. Сортировка идет нормально, при ввыводе всех данных. А при условии вывода интересующей части данных, пишет ошибку. mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in Ссылается на: PHP: $rows_count=mysqli_num_rows($result); Получется, что при выводе всех данных, он массив обрабатывает. а при условии каком то, не фурычит, в чем может быть причина?
от тебе false возвращает забей запрос в переменную перед mysqli_query(), выведи на экран и скинь сюда