Создать форум бесплатно: ixbb.ru :: Календарь на Май 2024 года: calendar2008.ru/2024/may/

Страницы: (2) [1] 2  ( Перейти к первому непрочитанному сообщению ) Reply to this topicStart new topicStart Poll

разыскивается скрипт вывода деревьев в mysql

dudeonthehorse
Отправлено: Jul 19 2011, 05:25 PM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 763
Пользователь №: 2933
Регистрация:
26-October 09



ПРиветсвтую!
Нужен ясный и понятный скрипт для реализации древовидных комментариев на сайте. Смотрел в сторону nested sets, но слишком много непонятного(хотя считается самым лучшим решением судя по отзывам). Другие скрипты не подошли так как не расчитаны на высокую нагрузку и ориентированы на вывод категорий каталога - не более.
Буду признателен за подсказки или если разжуете мне тот же nested sets на примерах smile.gif
PMEmail PosterICQ
Top
meta-trader
Отправлено: Jul 19 2011, 11:50 PM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 1120
Пользователь №: 1194
Регистрация:
11-October 07



Эта тема не так проста как кажется.


--------------------
Нужен форум для сайта? Создать свой форум
Нравятся ролевые игры? Создать форум для ролевой игры - создай ролевую и наслаждайся игрой!
Международный сервис фришных форумов - создать форум бесплатно.
PMEmail PosterUsers WebsiteICQ
Top
Матроскин
Отправлено: Jul 20 2011, 10:24 AM
Quote Post


  Генерал
*

Группа: Members
Сообщений: 245
Пользователь №: 2581
Регистрация:
9-June 09



Вот здесь неплохой скрипт с реализацией - ссылка


--------------------
PMEmail PosterUsers Website
Top
dudeonthehorse
Отправлено: Jul 20 2011, 10:46 PM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 763
Пользователь №: 2933
Регистрация:
26-October 09



видеоурок - это хорошо, посмотрим, спасибо
PMEmail PosterICQ
Top
dudeonthehorse
Отправлено: Jul 21 2011, 12:11 AM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 763
Пользователь №: 2933
Регистрация:
26-October 09



QUOTE (meta-trader @ Jul 19 2011, 11:50 PM)
Эта тема не так проста как кажется.

Спасибо , Капитан Очевидность!
PMEmail PosterICQ
Top
dudeonthehorse
Отправлено: Jul 21 2011, 07:35 AM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 763
Пользователь №: 2933
Регистрация:
26-October 09



Ок, Матроскин, я полагаю, ты читал материал, а не просто привел ссылку. Если подумать немного математически, то мы ведь можем немного упростить вывод? Я предлагаю использовать доп. поле "level" для каждого коммента, что избавит от необходимости делать кучу вложенных массивов. Достаточно будет отсортировать элементы массива в нужном порядке и давать левые отступы для комментариев соответственно значению "level". Вижу, что отсортировать можно, но немного не могу додумать wink.gif Давай подумаем вместе!
PMEmail PosterICQ
Top
dudeonthehorse
Отправлено: Jul 21 2011, 07:41 AM
Quote Post


  Команда ЭйсВэб
*

Группа: Super moderator
Сообщений: 763
Пользователь №: 2933
Регистрация:
26-October 09



мысль с сортировкой имеет зарождение тут http://webmastak.com/article.aspx?id=89, но что-то не складывается, т.к. тут рекурсивный метод, от которого желательно отказаться
PMEmail PosterICQ
Top
Матроскин
Отправлено: Jul 21 2011, 01:13 PM
Quote Post


  Генерал
*

Группа: Members
Сообщений: 245
Пользователь №: 2581
Регистрация:
9-June 09



Уже думал когда-то biggrin.gif
Дополнительное поле level здесь вряд ли поможет, поскольку основная проблема здесь - это вывод комментариев, при этом нужно, вытягивая их из БД, понять где чей потомок. Здесь без рекурсивного вывода очень тяжко. Я когда-то пробовал ради интереса сделать без рекурсии... мудрил и так, и этак - ничего не вышло.


--------------------
PMEmail PosterUsers Website
Top
Матроскин
Отправлено: Jul 21 2011, 01:18 PM
Quote Post


  Генерал
*

Группа: Members
Сообщений: 245
Пользователь №: 2581
Регистрация:
9-June 09



Щас появился свободный час - попробую вернуться к своим наработкам... может чего получится. Если получится - выложу.


--------------------
PMEmail PosterUsers Website
Top
Матроскин
Отправлено: Jul 21 2011, 02:14 PM
Quote Post


  Генерал
*

Группа: Members
Сообщений: 245
Пользователь №: 2581
Регистрация:
9-June 09



В общем, что-то есть. Суть в следующем... сначала вытаскиваем всех родителей, т.е. тех, у кого поле parent равно нулю. При этом в цикле запускается функция comment. Эта функция уже выводит результат запроса. При этом после каждого выведенного родителя она проверяет есть ли у родителя потомки (срабатывает ли условие запроса parent = текущему id). Если потомки есть, то рекурсивно вызывается функция comment.
При клике на ответить в скрытое поле передаем id того, кому отвечаем. Все без проверок, поэтому надо дорабатывать... но это уже мелочи smile.gif
CODE
<?php
mysql_connect("", "", "") or die("No connect to server");
mysql_select_db("") or die("No select DB");

function comment ($row) {
 echo "<li>";
 echo "<div>".$row['name']."</div>";
 echo "<div>".$row['text']."</div>";
 echo "<a href=\"index.php?reply={$row['id']}\" class='reaply' id=\"".$row['comment_id']."\">Ответить</a>";
 
  $res = mysql_query("SELECT * FROM `comments` where `parent`=".$row['id']);
 
  if (mysql_num_rows($res) > 0) {
 
   echo "<ul>";
   
    while ($res1 = mysql_fetch_assoc($res)){
     comment ($res1);
    }
   
   echo "</ul>";
  }
 
 echo "</li>";
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251" />
<meta name="Description" content="" />
<meta name="KeyWords" content="" />

<style type="text/css">

#content {
text-align: left;
height: 510px;
overflow: auto;
}

</style>

<title>Комменты</title>


</head>
<body>

<div id="content">
<ul id="comments">
<?php
$result = mysql_query("SELECT * FROM `comments` WHERE `parent`=0");
while($row = mysql_fetch_assoc($result)){
 comment($row);
}
?>
</ul>

<?php

if($_GET['reply']){
echo'
<form action="new_comment.php" method="post">
<p>Имя: <input type="text" name="name"/></p>
<p>Текст: <textarea name="text"></textarea></p>
<input type="hidden" name="parent" value="' .$_GET['reply']. '"/>
<p><input type="submit" value="Оправить"/></p>
</form>
';
}
?>  
</div>

</body>
</html>

Таблица comments состоит из 4-х полей:
id | name | text | parent
В поле parent хранится идентификатор комментария-родителя. Если родителя нет, то значение поля будет равно нулю (т.е. сам себе родитель). Запрос:
CODE
CREATE TABLE IF NOT EXISTS `comments` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(255) NOT NULL,
 `text` text NOT NULL,
 `parent` int(11) NOT NULL DEFAULT '0',
 PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6;

--
-- Dumping data for table `comments`
--

INSERT INTO `comments` (`id`, `name`, `text`, `parent`) VALUES
(1, 'Вася', 'Коммент Васи', 0),
(2, 'Петя', 'Коммент Пети', 0),
(3, 'Маша', 'Коммент Маши', 0),
(4, 'Саша', 'Ответ Саши Васе', 1),
(5, 'Андрей', 'Ответ Андрея Саше, ответившего Васе', 4);


--------------------
PMEmail PosterUsers Website
Top

Topic OptionsСтраницы: (2) [1] 2  Reply to this topicStart new topicStart Poll

 



[ Script Execution time: 0.0387 ]   [ 10 queries used ]   [ GZIP выключен ]