За последние 24 часа нас посетили 18134 программиста и 1699 роботов. Сейчас ищут 1488 программистов ...

Сортировка таблицы.

Тема в разделе "PHP для новичков", создана пользователем RelictX, 17 окт 2008.

  1. RelictX

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

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    Приветсвую коллег!

    В этом году закончил универ на программиста, однако нам не преподавали IT-технологии. Решил занятсья этим самостоятельно. В данный момент работаю над улучшением существующей базы данных.

    Юзаю PhpMyAdmin. Там вроде все просто. Сама база состоит из нескольких столбцов и выводиться на сайт с удаленным хостингом.

    Собственно сейчас сижу и разбираюсь в коде, задача стоит в принципе простая - для каждого столбца сделать баттон, при нажатии в первый раз на который в шла бы сортировка по возрастанию, а при нажатии второй раз - по убыванию, в третий опять во возрастанию... и т.д.

    Приведу часть кода с sql запросом:



    PHP:
    1. [color=darkblue]<?php
    2.  
    3.           $sql="SELECT teachers.id as t_id,famil,teachers.name as tname,otch, birthday,schools.name as schl,
    4.                 category.name as cname, subject.name as sname,kursinfo.kursplan,kursinfo.kursdate,kursinfo.skill, rayons.name
    5.                 FROM
    6.                     rayons,
    7.                     teachers left join schools on teachers.school=schools.id,
    8.                     (kursinfo left join subject on kursinfo.subject=subject.id)
    9.                      left join category on kursinfo.category=category.id
    10.                 where ((teachers.id=kursinfo.tid) and (rayons.id=teachers.rayon))";
    11.  
    12.  
    13.        if ($_SESSION['rayon']<>1) {
    14.  
    15.         if (isset($_SESSION['rayon'])) $sql.=" and teachers.rayon=".$_SESSION['rayon'];
    16.  
    17.         }
    18.  
    19.  
    20.         if ($_POST['famil']!=""){
    21.                 $sql.= " and (famil like '".$_POST['famil']."%')";
    22.                 //echo $sql;
    23.             }
    24.  
    25.  
    26.         if ($_POST['name']!=""){
    27.                 $sql.= " and (teachers.name like '".$_POST['name']."%')";
    28. //          echo $sql;
    29.             }
    30.  
    31.  
    32.         if ($_POST['otch']!=""){
    33.                 $sql.= " and (otch like '".$_POST['otch']."%')";
    34.                 //echo $sql;
    35.             }
    36.  
    37.         if ($_POST['kursname']!=""){
    38.                 $sql.= " and (kursinfo.kurs like '%".$_POST['kursname']."%')";
    39.                 //echo $sql;
    40.             }
    41.  
    42.         if ($_POST['category']!=""){
    43.                 $sql.= " and (kursinfo.category=".$_POST['category'].")";
    44.             }
    45.  
    46.         if ($_POST['subject']!=""){
    47.                 $sql.= " and (kursinfo.subject=".$_POST['subject'].")";
    48.             }
    49.  
    50.         if ($_POST['skill']!=""){
    51.                 $sql.= " and (kursinfo.skill=".$_POST['skill'].")";
    52.             }
    53.  
    54.         if ($_POST['rayon']!=""){
    55.                 $sql.= " and (teachers.rayon=".$_POST['rayon'].")";
    56.             }
    57.  
    58.         if ($_POST['kursplan']!=""){
    59.                 $kursplandate =explode('.',$_POST['kursplan']);
    60.                 $_POST['kursplan']=$kursplandate[2].'-'.$kursplandate[1].'-'.$kursplandate[0];
    61.                 $sql.= " and (kursinfo.kursplan='".$_POST['kursplan']."')";
    62.             }
    63.  
    64.         if ($_POST['kursdate']!=""){
    65.                 $sql.= " and (kursinfo.kursdate=".$_POST['kursdate'].")";
    66.             }
    67.  
    68.         if ($_POST['school']!=""){
    69.                 $sql.= " and (teachers.school=".$_POST['school'].")";
    70.             }
    71.  
    72.         //echo $sql;
    73.         ?>
    74.  
    75.         <tbody>
    76.         <?php
    77.         $result = mysqli_query($_SESSION['link'],$sql);
    78.         $rows_count=mysqli_num_rows($result);
    79.         $odd="";
    80.         if ($page_size<$rows_count){
    81.             $i=1;
    82.             while($i<=(($_SESSION['pagenumber']-1)*$page_size)){
    83.  
    84.                 $teacher=mysqli_fetch_assoc($result);
    85.                 $i++;
    86.                 }
    87.         }
    88.  
    89.          $users=1;
    90.          $tid_tmp=-1;
    91.          while (($users<=$page_size)&&($teacher=mysqli_fetch_assoc($result))){
    92.             if ($teacher['t_id']!=$tid_tmp){
    93.                 $tid_tmp=$teacher['t_id'];
    94.             $date =explode('-',$teacher['birthday']);
    95.             $kursdate=explode('-',$teacher['kursplan']);
    96.                 echo '<tr class="'.$odd.' user_row">';
    97.                 echo '<td class="browse_column  ">
    98.                   <input type="checkbox" name="selection_t[]" onclick="activateRow(this)" value="'.$teacher['t_id'].'"/>
    99.                </td>
    100.                 <td class="browse_column title sort_on">
    101.                <a href="edit.php?tid='.$teacher['t_id'].'" >'.
    102.                         $teacher['famil'].' '.$teacher['tname'].' '.$teacher['otch'].'</a>
    103.                </td>
    104.                     <td class="browse_column datecolumn ">
    105.                   '.$teacher['name'].'
    106.                </td>
    107.                              <td class="browse_column  ">
    108.                   '.$date[2].'.'.$date[1].'.'.$date[0].'
    109.                </td>
    110.                     <td class="browse_column datecolumn ">
    111.                   '.$teacher['sname'].'
    112.                </td>
    113.                              <td class="browse_column datecolumn ">
    114.                   '.$teacher['schl'].'
    115.                </td>
    116.                              <td class="browse_column datecolumn ">
    117.                   '.$kursdate[2].'.'.$kursdate[1].'.'.$kursdate[0].'
    118.                </td>
    119.                </tr>';
    120.              if ($odd==""){$odd='odd';}
    121.              else {$odd="";}
    122.               $users++;
    123.              }
    124.          }
    125.         ?>[/color]
    У кого есть какие нибудь мысли по данному вопросу? Спасибо! :roll:
     
  2. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    В посте описан опыт автора, что он юзает, чем занимается и дан код.
    В чем проблема-то?

    моя мысль по этому поводу: 49
     
  3. ShamahN

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

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    а я бы сказал, наверное, батарейки.
     
  4. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    чьорт, сегодня же пятницо, а я думаю, что все флудят…
     
  5. RelictX

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

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    Хотелось бы услышать дельное предложение.
    Каким алгоритмом пользоваться при решении данного вопроса. Код программы мной уже переделанный лежит перед вами.

    Может юзать баттон? Тогда как задать переменную, отвечающую за подсчет кликов по нему?
    Может быть каким то другим образом... Через сессию другую...
     
  6. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Luge
    Вливайся =))
     
  7. ShamahN

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

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    RelictX, для начала
    1) На танке читаем очень внимательно, и понимаем, что одним пхп с таким подходом как вы описали не обойтись. Хотя, конечно, обойтись... если... а баттонами нужно еще js... не варит... пятницо :):)
    2) Если не понимаем - покупаем книжку (умную), прорешиваем, по крайней мере, половину, и понимаем, что вопросов не осталось.
    3) Реализуем свою задачу, и с дельными вопросами возвращаемся, в конечном итоге, превращая свое здесь пребывание в крайне прогрессивный процесс получения навыков. :)
    А за Вас тут никто ничего писать не будет... ну, бесплатно не будет :)
     
  8. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    ну, мы попробуем, да?
    PHP:
    1. <?php
    2. $array = array('ASC','DESC');
    3. $sql = 'SELECT * FROM `table` ORDER BY `field` ';
    4. if(isset($_GET['op']) || !empty($_GET['op'])){
    5.    if($_GET['op']=='DESC')
    6.     rsort($array);
    7. }
    8. $sql .= $array[0].' LIMIT 3';
    9. $res=mysql_query($sql);
    10. ?>
    11. <form action="<?=$_SERVER['PHP_SELF']?>?cmd=select&op=<?=$array[1]?>" method="post">
    12. <input type="submit" name="sort" value="sort <?=$array[1]?>" />
    13. </form>
    какую-то фигню написал… На утро перечитаю — удалю :)
     
  9. ShamahN

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

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Luge, не думаю, что смысл затевать такую капусту с возможностью сортировать только по одному полю.
    Как я понял - несколько полей. В качестве заголовков в форме - батоны. Думаю отсортировать выборку-то не проблема :):)
    А вообще, где автор??? Ф студию. Пока я пьяный :):)
     
  10. RelictX

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

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    SQL запрос не зря такой длинный. Столбцов несколько.
    Тоесть, получается запрос для каждого баттона будет примерно таким:

    PHP:
    1.    $sql="SELECT teachers.id as t_id,famil,teachers.name as tname,otch, birthday,schools.name as schl,
    2.                    category.name as cname, subject.name as sname,kursinfo.kursplan,kursinfo.kursdate,kursinfo.skill, rayons.name
    3.                    FROM
    4.                        rayons,
    5.                        teachers left join schools on teachers.school=schools.id,
    6.                        (kursinfo left join subject on kursinfo.subject=subject.id)
    7.                      left join category on kursinfo.category=category.id
    8.                  where ((teachers.id=kursinfo.tid) and (rayons.id=teachers.rayon))
    9.                     order by FIELD ASC, DESC";
    У меня вроде получилось осуществить это при помощи UPDATE'а значений в специально созданной таблице в phpmyAdmin. Однако, есть загвоздка. Куда не нажми теперь на страничке, везде выполняется действие этого баттона. Тоесть если создам такой же запрос для другого столбца, будет выполняться сначала один, потом другой запрос, а не по нажатию батона определенного столбца...
    Млин сам чуть не запутался когда писал млин)))
     
  11. RelictX

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

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    Читать то, я читаю... И многую литературу, форумы и т.д.
    Однако, логика программирования присутствует. Так что, дельный совет мне не помешает. А чтобы кто то за меня все писал, мне не надо. Спасибо за активность)
     
  12. RelictX

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

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    Можно попробывать, только запрос надо другой) А вот при моем запросе, начинается каша)
     
  13. RelictX

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

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    Пожалуйста, посоветуйте что нибудь...
     
  14. obsrv

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

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    сделать единожды запрос и показ данных.
    при нажатии кнопок сортировать html таблицу жаваскриптом (без всяких php и запросов к бд).
     
  15. RelictX

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

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    Все так и спланировано, и сделано...
    Явой к сожалению пока не умею... придется разбираться...
     
  16. obsrv

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

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    ну есть бесплатные js библиотечки для работы по сортировке таблиц.

    если найду свою (когда-то сделанную) то могу и ей кинуть (если надо).
     
  17. RelictX

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

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    Был бы крайне благодарен! Спасибо заранее!
     
  18. obsrv

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

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    email в личку, дома поищу.
     
  19. RelictX

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

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    Ура, готово. Присобачил скрипт js и все работает! Спасибо!
     
  20. RelictX

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

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    Установил js скрипт sorttable.js...
    Вроде бы все нормально, да сортирует неправильно. В чем может бють причина?
     
  21. kostyl

    kostyl Guest

    RelictX
    Слушай разбирись в коде зачем что нужно там и что там написано после чего и зачем и что что означает, если ты закончил универ на программиста, то это я думаю не трудно сделать, что же вам там преподавали интересно если не IT - биофизику компьютера?
     
  22. RelictX

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

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    В коде php и sql я разобрался. Теперь идет речь о js.
    Начинаю снова подумывать сделать сортировку на php, без js, потому что никто не может толдково объяснить.
     
  23. RelictX

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

    С нами с:
    17 окт 2008
    Сообщения:
    58
    Симпатии:
    0
    Адрес:
    Казань
    Мне нравится сортировка в PhpMyAdmin...
    Как ее осуществить, склонировать? Может кто нибудь знает про это?
     
  24. kostyl

    kostyl Guest

    тебе ж написал Luge ('ASC','DESC') ты пришел за помощью или за тем, чобы на шару всё тебе написали и чтобы всё работало и блестело - это две разных вещи ;) второе тут редко бывает ;)