За последние 24 часа нас посетили 16412 программистов и 1558 роботов. Сейчас ищет 1821 программист ...

Разные виды сортировки

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

  1. dvitaly

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

    С нами с:
    1 окт 2008
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Крым
    Здравствуйте, сделал сортировку в таблице, по определённому полю, всё работает, только вот в чём вопрос
    Если я хочу сделать разные виды сортировки, мне же не обязательно для этого создавать кучу файлов,где каждый будет выводить записи по своей сортировке.
    Сейчас у меня пока 1 файл /result.php, в котором отсортировано имя по возростанию
    Хочу сделать что то типо Сортровать по email , чтобы при нажатии выполнилась сортировка, но как?
    1) Создавать новую страницу подобную /result.php только там сделать сортировку по email?
    2) Найти более правиньный вариант что то типо такого ?gr=9&r=13 или такого ?rub=4d49. Ведь это же не страницы созданные специально для сортировки?
    Как сделать чтобы сортировка произошла на этой же странице, чтобы в адресной строке было что то типо ?rub=4d49
    или что то подобное. Что это из себя предстваляет и как такое сделать? Спасибо :(
    На данный момент это мой файл
    PHP:
    1.  
    2. <?php
    3.  
    4. include ("mysql_connect.php");
    5. $select = mysql_query("
    6. SELECT *
    7. FROM `gb`
    8. ") or die ("Could not select from table".mysql_error());
    9.  
    10. $num_rows= mysql_num_rows($select);
    11. echo "Всего сообщений в книге: ".$num_rows."<br>";
    12.  
    13. $select= mysql_query("
    14. SELECT * FROM gb   ORDER BY  name ASC
    15. ");
    16. //Выводим сообщения гостевой
    17. while ($s= mysql_fetch_assoc($select)) {
    18.    //тело цикла, тут например:
    19.    echo "Запись №: ".$s['ID']."<br>";
    20.    echo "Имя: ".$s['name']."<br>";
    21.    echo "Email: <a href=\"mailto:".$s['email']."\">".$s['email']."</a><br>";
    22.    echo "Homapage: <a href=http://".$s['homepage']." target=blank>".$s['homepage']."</a><br>";
    23.    echo "Сообщение: ".$s['text']."<br>";
    24.    echo "Сообщение добавлено: ".$s['time']."<br><hr>";
    25.  }
    26. //Конец вывода
    27.  
    28.  ?>
    29.  
     
  2. Sephiroth_Lukaw

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

    С нами с:
    26 апр 2008
    Сообщения:
    62
    Симпатии:
    0
    PHP:
    1.  
    2. <?php
    3.   switch($_GET['sort']) {
    4.   case "email":
    5.   $sSort = "email";
    6.   break;
    7.   case "time":
    8.   $sSort = "time";
    9.   break;
    10.   default:
    11.   $sSort = "name";
    12.   break;
    13.   }
    14. ...
    15. $select= mysql_query("
    16. SELECT * FROM gb  ORDER BY  $sSort ASC
    17. ");
    18. ...
    19. ?>
    20.  
    result.php?sort=email

    upd. Вот это
    Если вы этот запрос используете, только для того, что бы посчитать сколько всего сообщений в книге, зачем выбирать все данные, если есть "SELECT COUNT(*) - http://www.mysql.ru/docs/man/Group_by_functions.html"?
     
  3. dvitaly

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

    С нами с:
    1 окт 2008
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Крым
    Спасибо большое, сейчас попробую, заодно и нашлось руководство по mysql http://www.mysql.ru/ Достаточно его для изучения майскл, или может ещё что то посотетуете? А это уже убрал, просто код не просмотрел на излишевства )
     
  4. Sephiroth_Lukaw

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

    С нами с:
    26 апр 2008
    Сообщения:
    62
    Симпатии:
    0
  5. dvitaly

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

    С нами с:
    1 окт 2008
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Крым
    Спасибо большое, вот что получилось с Вашей помощи. Ну оформление подправлю, всегда можете покритиковать моё творение ) Приму пожелания по улучшению и добавлению чего либа в вывод записей)
    PHP:
    1.  
    2. <?php
    3.  
    4. include ("mysql_connect.php");
    5.   //switch
    6.    switch($_GET['arsort']) {
    7.    case "name":
    8.    $arsort = "name";
    9.    break;
    10.    case "email":
    11.    $arsort = "email";
    12.    break;
    13.    case "time":
    14.    $arsort = "time";
    15.    break;
    16.    default:
    17.    $arsort = "time";
    18.    break;
    19.    }
    20.  //switch
    21.  $select= mysql_query("
    22. SELECT * FROM gb  ORDER BY  $arsort DESC
    23. ");
    24.  
    25.  echo "<a href=\"?arsort=name\">Сортировать по имени по убыванию</a><br>";
    26.   echo "<a href=\"?arsort=email\">Сортировать по email по убыванию</a><br>";
    27.    echo "<a href=\"?arsort=time\">Сортировать по time по убыванию</a><br>";
    28.  
    29.  
    30.  //switch
    31.    switch($_GET['asort']) {
    32.    case "name":
    33.    $asort = "name";
    34.    break;
    35.    case "email":
    36.    $asort = "email";
    37.    break;
    38.    case "time":
    39.    $asort = "time";
    40.    break;
    41.      
    42.    default:
    43.    $asort = "time";
    44.    break;
    45.    }
    46.  //switch
    47.  $select= mysql_query("
    48. SELECT * FROM gb  ORDER BY  $asort ASC
    49. ");
    50.  
    51.  echo "<a href=\"?asort=name\">Сортировать по имени по возрастанию</a><br>";
    52.   echo "<a href=\"?asort=email\">Сортировать по email по возрастанию</a><br>";
    53.    echo "<a href=\"?asort=time\">Сортировать по time по возрастанию</a><br>";
    54.  
    55.    //Выводим сообщения гостевой
    56. while ($s= mysql_fetch_assoc($select)) {
    57.    //тело цикла, тут например:
    58.    echo "Запись №: ".$s['ID']."<br>";
    59.    echo "Имя: ".$s['name']."<br>";
    60.    echo "Email: <a href=\"mailto:".$s['email']."\">".$s['email']."</a><br>";
    61.    echo "Homapage: <a href=http://".$s['homepage']." target=blank>".$s['homepage']."</a><br>";
    62.    echo "Сообщение: ".$s['text']."<br>";
    63.    echo "Сообщение добавлено: ".$s['time']."<br><hr>";
    64.  }
    65. //Конец вывода
    66.  
    67.  
    68.  ?>
     
  6. Sephiroth_Lukaw

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

    С нами с:
    26 апр 2008
    Сообщения:
    62
    Симпатии:
    0
    В любой случае будет сортировка по возрастанию, вы переменной $select присваиваете новое значение(переписываете).
    Делайте проверку на существование переменной $_GET['asort'], если она есть, то выполнением сортировку по возрастанию.
    И, я бы на вашем месте, сделал бы так
    Код (Text):
    1. echo "<a href=\"?sort=name&desc=1\">Сортировать по имени по убыванию</a><br>";
    2. echo "<a href=\"?sort=name&desc=0\">Сортировать по имени по возрастанию</a><br>";
    Т.е. если desc равен 1, то делаем сортировку по убыванию, в противном случае, по возрастанию.
    Что-то типа такого
    Код (Text):
    1. if(isset($_GET['desc']) && $_GET['desc'] == 1) {
    2. $sSortType = "DESC";
    3. } else {
    4. $sSortType = "ASC";
    5. }
    6. $select= mysql_query("
    7. SELECT * FROM gb  ORDER BY  $sort $sSortType
    8. ");
     
  7. dvitaly

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

    С нами с:
    1 окт 2008
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Крым
    Тоже идея, спасибо, но думаю для первых двух месяцев знакомства с ПХП я кое что начал понимать, хотя раньше не на одном из языков не умел программировать), а тем более не представлял что это такое даже, спасибо , что помогли, так как кроме этого форума в этом деле никто больше не поможет мне