|
|
|
| Структура таблицы:
CREATE TABLE wall` (
`id` int(10) unsigned NOT NULL auto_increment,
`sender_id` int(10) unsigned NOT NULL,
`receiver_id` int(10) unsigned NOT NULL,
`message` text character set utf8 NOT NULL,
`prev_message` int(10) unsigned default NULL,
)
Таблица сообщений. `message` - текст сообщения, `prev_message` - ID сообщения, которое цитируется (или отвечается на него).
Задача: Нужно сделать выборку сообщений таким образом, чтобы шли сообщения по убыванию своего ID и если на это сообщения есть ответы, то выбрать и их.
Так реализовано на хабре.
Пример:
-Сообщение №10.
-Сообщение №9.
-Сообщение №8.
- - Ответ1 на сообщение №8
- - Ответ2 на сообщение №8
- - - Ответ на ответ
-Сообщение 1
Т.е. структура в виде дерева.
Заранее благодарен. | |
|
|
|
|
|
|
|
|
для: cheops
(08.10.2009 в 03:20)
| | Спасибо за помощь! | |
|
|
|
|
|
|
|
для: cheops
(08.10.2009 в 03:20)
| | На данный момент функция сортировки такая:
private function baseSort($id, $parentText = "")
{
static $messages = array();
$userID = $this->getId();
$sql_query = "SELECT w.id as id, w.sender_id as auth_id, w.message as text, w.date as date, w.rate as rate,
u.name as auth_fname, u.lastname as auth_lname, u.avatar as avatar
FROM wall w, users u
WHERE u.id=w.sender_id AND w.receiver_id=:receiver AND w.is_deleted=FALSE AND prev_message=:message_id
ORDER BY date DESC";
$sql = $this->db->prepare($sql_query);
$sql->bindParam(':receiver', $userID, PDO::PARAM_INT);
$sql->bindParam(':message_id', $id, PDO::PARAM_INT);
$sql->execute();
while ($row = $sql->fetch(PDO::FETCH_ASSOC))
{
if ($parentText != "")
$row['parent_text'] = $parentText;
$messages[] = $row;
$this->baseSort($row['id'], $row['text']);
}
return $messages;
}
|
данные сортируются по полю "дата" по убыванию. Как сделать, чтобы сначала выводилась ветка сообщений, у которой самое новое сообщение, потом следующая и тд.
Пример:
Было:
-Сообщение №10.
-Сообщение №9.
-Сообщение №8.
- - Ответ1 на сообщение №8
- - Ответ2 на сообщение №8
- - - Ответ на ответ
-Сообщение 1
Стало:
-Сообщение 1
- - Ответ на сооб. №1. А это самое новое сообщение.
-Сообщение №10.
-Сообщение №9.
-Сообщение №8.
- - Ответ1 на сообщение №8
- - Ответ2 на сообщение №8
- - - Ответ на ответ | |
|
|
|
|
|
|
|
для: Ramilka
(13.10.2009 в 16:10)
| | Это, мягко говоря, ни разу не функция сортировки.
Это функция рекурсивного отбора элементов дерева.
Возвращает она plain list (одномерный массив)
В таком виде доточить её до полного порядка довольно трудно.
Лучше пытаться построить дерево на уровне php. | |
|
|
|