За последние 24 часа нас посетили 54288 программистов и 1766 роботов. Сейчас ищут 1617 программистов ...

Сортировка и группировка.

Тема в разделе "PHP для новичков", создана пользователем Salvat, 5 май 2016.

  1. Salvat

    Salvat Новичок

    С нами с:
    4 мар 2016
    Сообщения:
    101
    Симпатии:
    0
    Здраствуйте. Пытаюсь реализовать стену как была раньше в вконтакте, старая именно стена, а не микроблоги. Имеются группы, с которых сообщения отображаются на стене, каждое сообщение имеет свой id. Это сообщение от администратора группы. Мне необходимо чтобы пользователи могли цитировать на стене. Цитирование у меня тоже прописано и работает. Только цитируется таким образом, имеется одно сообщение и если под ним оставить два комментария, тогда из одного сообщения получается два. То есть от администратора группы с двумя комментариями.

    PHP:
    1. $res_group_user = mysql_query("SELECT * FROM `group_users` WHERE `user_id`='$id'");
    2.         if(mysql_num_rows($res_group_user)>0){
    3.             while($rs_gr = mysql_fetch_assoc($res_group_user)){
    4.                 $gr_admin = $rs_gr['group_admin'];
    5.                 $gr_id = $rs_gr['group_id'];
    6.                     $info_group = mysql_query("SELECT * FROM `group_name` WHERE `group_id`='$gr_id' and `group_admin`='$gr_admin'");
    7.                         if(mysql_num_rows($info_group)>0){
    8.                             while($info_gr = mysql_fetch_assoc($info_group)){
    9.                                 $info_name = $info_gr['group_names'];
    10.                                     $avatar_res = mysql_query("SELECT `avatar` FROM `users` WHERE `id`='$gr_admin'");
    11.                                         while($row_avatar = mysql_fetch_assoc($avatar_res)){
    12.                                             if($row_avatar['avatar'] == ""){
    13.                                             $avatar = "images/No-Avatar.png";
    14.                                             }
    15.                                             else{
    16.                                             $avatar = $row_avatar['avatar'];
    17.                                             }
    18.                                     $info_mess = mysql_query("SELECT * FROM `group_messages`
    19.                                     WHERE `group_admin`='$gr_admin' and `group_id`='$gr_id' and `user_id`='$id' ORDER BY date DESC "); // вот тут сортировка по дате от администратора группы
    20.                                         if(mysql_num_rows($info_mess)>0){
    21.                                             while($rs_info = mysql_fetch_assoc($info_mess)){
    22.                                                $comment_res = mysql_query("SELECT * FROM `group_wall` WHERE message_id='".$rs_info['id']."'"); // это вывод из базы комментариев от пользователей которые цитировали
    23.                                                if(mysql_num_rows($comment_res)>0){
    24.                                                  while ($rs_comment = mysql_fetch_array($comment_res)){
    25.                                                    $info_res = mysql_query("SELECT * FROM users WHERE id='".$rs_comment['user_id']."'"); // вывод данных пользователя которые цитировали
    26.                                                     while($rs_user = mysql_fetch_array($info_res)){
    27.                                                     if($rs_user['avatar'] == ""){
    28.                                             $avatar_user = "images/No-Avatar.png";
    29.                                             }
    30.                                             else{
    31.                                             $avatar_user = $rs_user['avatar'];
    32.                                             }
    33.                                                 $stena_group .= "<a href='group_room.php?id=".$id."&group=".$gr_admin."&room=".$gr_id."'>Название группы: <b>" . $info_name . "</a></b>
    34.                                                <br/><a href='profile.php?id=".$gr_admin."'>Администратор: <b>" .
    35.                                                  $rs_info['user_first_name'] . "&nbsp;" . $rs_info['user_last_name'] .
    36.                                                 "</b></a><br/>Сообщение: " . $rs_info['group_messages'] . "<br/>" . $rs_info['date'] . "<br/>
    37.                        Комментарий от:<br/><img src='".$avatar_user." ' style='width:100;height:120px;'><br/>" . $rs_user['lastname'] . "&nbsp;" . $rs_user['first_name'] . "<br/>" .$rs_comment['message']."
    38.                                                <br/><br/>";
    39.                                                 if($id != $rs_comment['user_id']){
    40.                                                                        
    41.                                                                               $stena_group .='<p><a href="javascript:void(0);" onclick="comment( document.getElementById('.$rs_info['id'].').value, '.$rs_info['id'].' );">
    42.                                                  Отправить</a> </p>
    43.                                                </form><br/><br />';
    44.                                                 }
    45.  
    46.                                             }
    47.                                                     }
    48.                                
    49.                                                 }
    50.                                                 else{
    51.                         $stena_group .= "<a href='group_room.php?id=".$id."&group=".$gr_admin."&room=".$gr_id."'>Название группы: <b>" . $info_name . "</a></b>
    52.                                                <br/><a href='profile.php?id=".$gr_admin."'>Администратор: <b>" .
    53.                                                  $rs_info['user_first_name'] . "&nbsp;" . $rs_info['user_last_name'] .
    54.                                                 "</b></a><br/>Сообщение: " . $rs_info['group_messages'] . "<br/>" . $rs_info['date'] . "<br/>
    55.                                                <form id='submit_wall' >
    56.                                                <p><input type='text' name='comment' id='".$rs_info['id']."' value='' style='height:100p' /></p>
    57.                                                <p> <input type='hidden' name='messageid' id='".$rs_info['id']."' value='".$rs_info['id']."'></p>";
    58.                                                
    59.                                                   $stena_group .='<p><a href="javascript:void(0);" onclick="comment( document.getElementById('.$rs_info['id'].').value, '.$rs_info['id'].' );">
    60.                                                  Отправить</a> </p>
    61.                                                </form><br/><br />';
    62.                                                 }
    63.                            
    64.                                                
    65.                                             }
    66.                                                
    67.                                             }
    68.                                         }
    69.                             }
    70.                         }
    71.             }
    72.         }
    Прикладываю изображение как оно все выглядит
    [​IMG]
    Название группы test open и сообщение test - это одно сообщение, а проверка и проверка 2 это два разных комментария, которые должны отобразиться под одним сообщением администратора, то есть под сообщением test. Подскажите, пожалуйста, каким образом сгруппировать и выводить комментарии под каждым сообщением от администратора группы. Сообщений от администратора может быть много и так же каждое должно цитироваться. ID сообщения от администратора группы записывается в отдельную таблицу, за счет чего происходит вывод под каждым сообщением свои комментарии.
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    для начала я бы рекомендовал избавиться от такого кол-ва вложенных запросов. это просто смерть какая-то...
     
  3. Salvat

    Salvat Новичок

    С нами с:
    4 мар 2016
    Сообщения:
    101
    Симпатии:
    0
    Часть формы вырезал случайно, но она на сортировку не влияет.
    --- Добавлено ---
    Код оптимизирую по окончанию.
    --- Добавлено ---
    Убрал один запрос.
    PHP:
    1. $res_group_user = mysql_query("SELECT * FROM `group_users` WHERE `user_id`='$id'"); // поиск пользователя в группе
    2.         if(mysql_num_rows($res_group_user)>0){
    3.             while($rs_gr = mysql_fetch_assoc($res_group_user)){
    4.                 $gr_admin = $rs_gr['group_admin'];
    5.                 $gr_id = $rs_gr['group_id'];
    6.                     $info_group = mysql_query("SELECT * FROM `group_name` WHERE `group_id`='$gr_id' and `group_admin`='$gr_admin'"); // вывод администратора группы, названия группы, описания, заркрытая или открытая группа и еще разные имеются группы
    7.                         if(mysql_num_rows($info_group)>0){
    8.                             while($info_gr = mysql_fetch_assoc($info_group)){
    9.                                 $info_name = $info_gr['group_names'];
    10.                                     $info_mess = mysql_query("SELECT * FROM `group_messages`
    11.                                     WHERE `group_admin`='$gr_admin' and `group_id`='$gr_id' and `user_id`='$id' ORDER BY date DESC"); // вывод сообщения от администратора, именно от администратора, а не тех что еще пользователи писали
    12.                                         if(mysql_num_rows($info_mess)>0){
    13.                                             while($rs_info = mysql_fetch_assoc($info_mess)){
    14.                                                $comment_res = mysql_query("SELECT * FROM `group_wall` WHERE message_id='".$rs_info['id']."'"); // вывод комментария от пользователя с группы где он присутствует
    15.                                                if(mysql_num_rows($comment_res)>0){
    16.                                                  while ($rs_comment = mysql_fetch_array($comment_res)){
    17.                                                    $info_res = mysql_query("SELECT * FROM users WHERE id='".$rs_comment['user_id']."' and `id`='$gr_admin'"); // вывод информации о пользователе, об администраторе и названии группы выше выводится
    18.                                                     while($rs_user = mysql_fetch_array($info_res)){
    19.                                                     if($rs_user['avatar'] == ""){
    20.                                             $avatar_user = "images/No-Avatar.png";
    21.                                             }
    22.                                             else{
    23.                                             $avatar_user = $rs_user['avatar'];
    24.                                             }
    25.                                                 $stena_group .= "<a href='group_room.php?id=".$id."&group=".$gr_admin."&room=".$gr_id."'>Название группы: <b>" . $info_name . "</a></b>
    26.                                                <br/><a href='profile.php?id=".$gr_admin."'>Администратор: <b>" .
    27.                                                  $rs_info['user_first_name'] . "&nbsp;" . $rs_info['user_last_name'] .
    28.                                                 "</b></a><br/>Сообщение: " . $rs_info['group_messages'] . "<br/>" . $rs_info['date'] . "<br/>
    29.                        Комментарий от:<br/><img src='".$avatar_user." ' style='width:100;height:120px;'><br/>" . $rs_user['lastname'] . "&nbsp;" . $rs_user['first_name'] . "<br/>" .$rs_comment['message']."
    30.                                           ";
    31.                                                 if($id == $rs_comment['user_id']){
    32.                                                                  
    33.                                                                               $stena_group .='     <form id="submit_wall" >
    34.                                                <p><input type="text" name="comment" id="'.$rs_info['id'].'" value="" style="height:100p" /></p>
    35.                                                <p> <input type="hidden" name="messageid" id="'.$rs_info['id'].'" value="'.$rs_info['id'].'"></p><p><a href="javascript:void(0);" onclick="comment( document.getElementById('.$rs_info['id'].').value, '.$rs_info['id'].' );">
    36.                                                  Отправить</a> </p>
    37.                                                </form><br/><br />';
    38.                                                 }
    39.  
    40.                                             }
    41.                                                     }
    42.                              
    43.                                                 }
    44.                                                 else{
    45.                         $stena_group .= "<a href='group_room.php?id=".$id."&group=".$gr_admin."&room=".$gr_id."'>Название группы: <b>" . $info_name . "</a></b>
    46.                                                <br/><a href='profile.php?id=".$gr_admin."'>Администратор: <b>" .
    47.                                                  $rs_info['user_first_name'] . "&nbsp;" . $rs_info['user_last_name'] .
    48.                                                 "</b></a><br/>Сообщение: " . $rs_info['group_messages'] . "<br/>" . $rs_info['date'] . "<br/>
    49.                                                <form id='submit_wall' >
    50.                                                <p><input type='text' name='comment' id='".$rs_info['id']."' value='' style='height:100p' /></p>
    51.                                                <p> <input type='hidden' name='messageid' id='".$rs_info['id']."' value='".$rs_info['id']."'></p>";
    52.                                              
    53.                                                   $stena_group .='<p><a href="javascript:void(0);" onclick="comment( document.getElementById('.$rs_info['id'].').value, '.$rs_info['id'].' );">
    54.                                                  Отправить</a> </p>
    55.                                                </form><br/><br />';
    56.                                                 }
    57.                          
    58.                                                
    59.                                             }
    60.                                                
    61.                                             }
    62.                                      
    63.                             }
    64.                         }
    65.             }
    66.         }
     
  4. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    всё же изучи mysql join и перестань собирать данные циклами циклов. сколько у тебя запросов на страницу случается? сто?
    --- Добавлено ---
    ну и с mysql_* переходи на mysqli_*
     
  5. Salvat

    Salvat Новичок

    С нами с:
    4 мар 2016
    Сообщения:
    101
    Симпатии:
    0
    Спасибо за совет, только кто мне советует циклами, кто пишет что join не нужно. Уже сталкивался с работой с несколькими таблицами, изучал join. Только пока вопрос о сортировке и группировке.
     
  6. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ты у попова чтоль совета спросил? ну-ну. давай вместе почитаем:

    SELECT * FROM `group_users` WHERE `user_id`='$id' - выбор всех данных для пользователя с айдишником. ок.
    в цикле изучаем что? вот реально ЧТО? у тебя может быть несколько пользователей с одним айдишником? СЕРЬЕЗНО? идентификатор он идентифицирует. в контексте пользователя - он у каждого уникален. ну да ладно. дернул ты цикл, тело выполнилось ровно один раз (потому что я надеюсь у тебя всё же один айдишник не дается многим пользователям), объявил ты переменные:
    $gr_admin=$rs_gr['group_admin'];
    $gr_id=$rs_gr['group_id'];
    ок. тут значит админ группы и идентификатор группы. я не очень себе представляю какая у тебя логика поля "груп_админ" но вполне догадываюсь что "груп_айди" относится к группе пользователя. того самого одного, которого мы получили в единственной итерации результата запроса пользователя по уникальному идентификатору.
    что мы делаем далее?
    SELECT * FROM `group_name` WHERE `group_id`='$gr_id' and `group_admin`='$gr_admin'
    выбираем из таблицы "груп_нейм" группу по... ну ладно по айдишнику, уникальность и всё такое. но по админу-то зачем?
    вот уже эту пару - пользователь-группа - можно заджойнить и получить один кортеж сразу и с юзером и с группой. ведь группа будет одна. так ведь. УНИКАЛЬНЫЙ ИДЕНТИФИКАТОР ГРУППЫ БУДЕТ УНИКАЛЬНЫМ? или как с пользователем вдруг возможны варианты?

    опять используем цикл для обработки одной единственной записи группы (ну я надеюсь что единственной). что дальше?
    SELECT * FROM `group_messages`
    WHERE `group_admin`='$gr_admin' and `group_id`='$gr_id' and `user_id`='$id' ORDER BY date DESC
    ну да, опять мы не только по айдишнику группу выбираем но и по админу. и по юзеру. тут архитектура бд только тебе понятна. слово дейт является зарезервированным (ключевым) поэтому если у тебя есть поле с таким незамысловатым названием - имя поля нужно брать в грависы.
    вернемся к запросу. тут кажется впервые он должен вернуть более одной строки и тогда итерация запроса циклом - вполне подходит. смотрим что же нас ждет дальше. для каждого сообщения (судя по названию таблицы) мы делаем что? та-дааааам:
    SELECT * FROM `group_wall` WHERE message_id='".$rs_info['id']."'
    то есть выбираем это сообщение по его идентификатору.
    что мешает заджойнить с прошлым запросом и получить одну результирующую таблицу слепленную из двух? ну кроме того что тебе кто-то люто посоветовал не юзать джойн и ты решил положить сервер надрачиванием по одной записи сотней запросов?

    НУ ДА ЛАДНО. нас ведь ждет еще один цикл запросов:
    SELECT * FROM users WHERE id='".$rs_comment['user_id']."' and `id`='$gr_admin'
    то есть для каждого коммента мы будем дергать инфу об юзере его написавшем. а если пользователь написал пять комментов? да, это будет пять отдельных запросов на одни и те же данные. заeбок.
    и как ты можешь догадаться, эту - ТРЕТЬЮ ТАБЛИЦУ - можно заджойнить к первым двум - месаги и вол - и получить одним запросом все нужные тебе данные.

    с джойнами ты делаешь 1 запрос на группа-имя и 1 запрос на месаги-вол-юзерс.
    без джойнов ты делаешь 1 на юзера группы, 1 на имя группы, 1 запрос на сообщения, 1 * N запросов на сообщения, 1 * N на юзеров сообщений. 3 + (2*N). минимум 5 против стабильно 2 с джойнами.

    мне бы хотелось послушать аргументы в пользу отказа от джойна и перехода на вот этот фарш о сотне запросов в данном конкретном случае.
     
  7. Salvat

    Salvat Новичок

    С нами с:
    4 мар 2016
    Сообщения:
    101
    Симпатии:
    0
    ID у каждого пользователя уникален, переменные разумеется объявлены. Одинаковых быть не может.
    Админ может создавать разные группы и у каждой группы будет свой id, но id администратора разумеется один, а групп может быть много под разными id.
    Один админ может иметь группу как 1,2,3,4 и т.д, второй админ группы может так же иметь группу под номером 1,2,3 и так со всеми подряд. Для этого и производится выборка по уникальному id админа и группы
    Выше на этот вопрос по поводу архитектуры есть ответ. Все уникальное, а по юзеру, чтобы выбрать сообщения с групп на которые подписан пользователь, в каких группах он писал. Не взял в грависы, т.к. собственно и хотел добиться сортировки о чем и писал в первом посте.

    Уже переписываю код, тут я согласен, еще раз ознакомившись с материалом, что будет проще слепить таблицы и с ними работать. А все остальное пояснил что и как должно работать. Все данные уникальны, нельзя их просто тупо по id дергать и сверять, группы могут иметь разные id и принадлежать одному админу, так же юзер может участвовать в разных группах и писать там сообщения, комментарии.
     
  8. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    тебе основы реляционных баз данных надо почитать. есть у тебя список (таблица) пользователей, есть у тебя список (таблица) групп. у каждого пользователя может быть одна первичная группа. связь 1-1. у каждой группы может быть главный администратор (пользователь). связь 1-1. каждый пользователь может состоять в нескольких группах. связь 1-n. при этом по этой же связи можно давать флаг что он не просто пользователь а "младший администратор" группы. то есть возникает еще лишь одна таблица - пользователи в группах. и джойнить первые две через третью вполне удобно.
     
  9. Salvat

    Salvat Новичок

    С нами с:
    4 мар 2016
    Сообщения:
    101
    Симпатии:
    0
    Можно пожалуйста пример, если не затруднит, да бы проще было вникнуть.
    PHP:
    1.  SELECT `group_users.user_id`,`group_name.group_admin`
    2.  FROM `group_users` INNER JOIN `group_name`
    3.  ON `group_users.user_id`=`group_name.group_admin`;
    Пока так пробую в phpmyadmin, ошибку выдает, читаю мануалы. Уже проклинаю того кто мне посоветовал что лучше циклы лепить.
     
  10. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ошибку синтаксиса поди выдает?
     
  11. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    может лучше книгу для начинающих по MySql, там основы разжуют.
     
  12. Salvat

    Salvat Новичок

    С нами с:
    4 мар 2016
    Сообщения:
    101
    Симпатии:
    0
    Да, разобрался. Создам отдельную тему, хочу вникнуть что к чему. К этой теме JOIN не подходит, тут другой вопрос был создан.
    --- Добавлено ---
    @denis01, на пальцах бы кто накидал на моем примере. В сети читаю, там не совсем все понятно пока что. Хотя бы как и что оно работает. Сейчас тему создам и там все объясню, свои вопросы в разделе новичков.
     
  13. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    в твоем примере может быть ошибка архитектуры базы данных
     
  14. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Ты просто хочешь готовый код? Если нет, то придётся повторять теорию. Потому что ты в ней делаешь ошибку. Может взять задачу по легче, примеры из книг по JOIN поиграться с ними. По другому ты хочешь что кто-то написал изложение по теории, которая уже есть в книгах.
     
  15. Salvat

    Salvat Новичок

    С нами с:
    4 мар 2016
    Сообщения:
    101
    Симпатии:
    0
    Нет, мне готовый код не нужен, я просто хочу разобраться, чтобы кто-то подсказал и указал на ошибки. А с кодом и так уже играюсь.
     
  16. machetero

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

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    я например разобрался как проектировать базы данных, когда мне дали ссылку на "Нормальные формы". Почитай хотябы про первых 3.
    чтобы въехать в структурированый язык запросов, советую книжку Алана Бьюли, она всего на 300 стр и легко читается
    Вот когда с этим ознакомишься, будет потом легко.
     
  17. Salvat

    Salvat Новичок

    С нами с:
    4 мар 2016
    Сообщения:
    101
    Симпатии:
    0
    @machetero, благодарю за совет.
    Сейчас код выглядит таким образом.

    PHP:
    1. <?php
    2. include_once('tpl/head.tpl');
    3. include_once('config.php');
    4. $result_join = mysql_query("SELECT *
    5. FROM group_name INNER JOIN group_users
    6. ON group_name.group_id=group_users.group_id LEFT JOIN group_messages
    7. ON group_name.group_admin=group_messages.group_admin
    8. WHERE group_users.user_id='1'  GROUP BY group_messages.id ASC") or die(mysql_error());
    9.         if(mysql_num_rows($result_join)>0){
    10.         while($row = mysql_fetch_array( $result_join)){
    11.         $group_stena .= $row['id'];
    12.         $comment_res = mysql_query("SELECT * FROM `group_wall` WHERE message_id='".$row['id']."' and user_id='1'");
    13.             while($row_comment = mysql_fetch_array($comment_res)){
    14.              $comment = $row_comment['message'];
    15.              $comment_data = $row_comment['timedata'];
    16.             }
    17.             if(empty($comment)){
    18.             $group_stena .= "<a href='group_room.php?id=".$id."&group=".$row['group_admin']."&room=".$row['group_id']."'>
    19.            Название группы: <b>" . $row['group_names'] . "</a></b>
    20.                                                <br/><a href='profile.php?id=".$row['group_admin']."'>Администратор: <b>" .
    21.                                                  $row['first_name_admin'] . "&nbsp;" . $row['last_name_admin'] .
    22.                                                 "</b></a><br/>Сообщение: " . $row['group_messages'] . "<br/>" . $row['date'] . "<br/>
    23.                                                <form id='submit_wall' >
    24.                                                <p><textarea type='text' name='comment' id='".$row['id']."' value='' style='height:100p' /></textarea>
    25.                                                <p> <input type='hidden' name='messageid' id='".$row['id']."' value='".$row['id']."'></p>
    26.                        <p><a href='javascript:void(0);' onclick='comment( document.getElementById('".$row['id']."').value, '".$row['id']."' );'>
    27.                                                  Отправить</a> </p>
    28.                                                </form><br/><br />";
    29.             }
    30.             else{
    31.                 $group_stena .= "<a href='group_room.php?id=".$id."&group=".$row['group_admin']."&room=".$row['group_id']."'>
    32.            Название группы: <b>" . $row['group_names'] . "</a></b>
    33.                                                <br/><a href='profile.php?id=".$row['group_admin']."'>Администратор: <b>" .
    34.                                                  $row['first_name_admin'] . "&nbsp;" . $row['last_name_admin'] .
    35.                                                 "</b></a><br/>Сообщение: " . $row['group_messages'] . "<br/>" . $row['date'] . "<br/>
    36.                        Комментарий от:<br/><img src='".$avatar_user." ' style='width:100;height:120px;'><br/>" . $rs_user['last_name'] . "&nbsp;" . $rs_user['first_name'] . "<br/>Сообщение: " .$row_comment['message']."
    37.                                           <br/>".$comment_data."<br/><br/>
    38.                                                <form id='submit_wall' >
    39.                                                <p><textarea type='text' name='comment' id='".$row['id']."' value='' style='height:100p' /></textarea>
    40.                                                <p> <input type='hidden' name='messageid' id='".$row['id']."' value='".$row['id']."'></p>
    41.                        <p><a href='javascript:void(0);' onclick='comment( document.getElementById('".$row['id']."').value, '".$row['id']."' );'>
    42.                                                  Отправить</a> </p>
    43.                                                </form><br/><br />";
    44.             }
    45.         }
    46.    
    47.     }
    48.    
    49. echo $group_stena;
    50. ?>
    Это тестовый код, только что написал.
    Будет еще один запрос на вывод аватарки, потом оптимизирую и буду писать адрес аватарки в сообщения или комментарии. Речь не об оптимизации кода. Речь идет о построении диалога. Чтобы было дерево. Есть сообщение с id 1 и есть комментарии которые должны выводиться которые относятся к сообщению id 1. Вот мне необходимо их выводить под каждым сообщением и чтобы было текстовое поле для одного главного сообщения, под всеми комментариями для оставления комментария. Думаю, нужно в сторону условия думать, выводить поле для ввода текста в самом конце коментариев. Каким образом можно организовать такую проверку или сортировку чтобы выводить в самом конце результата?