Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выбор данных их таблицы 
:(
    Опции темы
library
Дата 25.8.2010, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 28.3.2008

Репутация: нет
Всего: нет



Здравствуйте.

Помогите придумать запрос на выборку данных из БД.

Вобщем в таблице хранятся комментарии к статье. У каждого комментария есть id, а также есть поле ido в котором хранится id того комментария на который даёт ответ данный коментарий. Если комментарий отвечает не на другой комментарий, а на статью, то в поле ido хранится значение 0.

С помощью запроса нужно организовать вывод комментариев в следующей последовательности:

комментарий с id 1 и ido 0, затем ответ на него(если есть), затем ответ на ответ(если есть) и т.д (такая древовидная структура), затем следующий комментарий с ido 0.

Надеюсь доступно объяснил. Возможно эту систему комментов можно как то по проще организовать?
PM MAIL   Вверх
skyboy
Дата 25.8.2010, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



формируй дерево клиентом(РНР или что там у тебя).
выбирай просто все комментарии(лучше бы в порядке увеличения вложенности).
PM MAIL   Вверх
Finalist
Дата 25.8.2010, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 23.5.2006

Репутация: нет
Всего: 1



А поля id_статьи в таблице случайно нет? 
по идее в скрипт должен приходить параметр айди_статьи --- http://some.com/staty.php?id=xx
не уверен, что можно сделать одним запросом...
сначала нужно выбрать коменты к статье с айди хх и ido=0; 
Код

select * from `комментс` where `айди_статьи`=xx АНД идо=0;


(извиняюсь за русские буквы в коде.. но шота у меня убунту подзаглючил... на англ раскладке пишет русские буквы, select набираю, получается селецт)))

затем, пройтись по массиву с результатами, и выбрать дочерние  коменты.

Код

$ресулт = "результаты предыдущего запроса";
$енд_аррай = аррай();
форич ($ресулт ас $абц)
{
    аррай_пуш($енд_аррай, $абц);
    $ку = "селект * фром комментс where `айди_статьи`=хх АНД идо=абц['айди']";
    иф ($ку_линк = мускл_квери($ку) && $темп = мускл_феч_ассоц($ку_линк))
    {
        аррай_пуш($енд_аррай, $темп);
        // тут нужно сделать рекурсивную функцию которая достает дочерние коменты от комента с переданным айди...  
        // (без рекурсии получится только один  подуровень коментов)
        // в нее передаешь айди родителя($абц['айди']), а она возвращает массив который просто пихаешь в конец конечного массива,
        // после проходишь по собранному массиву и генеришь хтмл с коментами... 
        // желательно чтоб в конечном массиве как-то указать что элемент этого массива есть ответ на предыдущий пост,
        // чтоб сделать отступ на странице.. 
    }
}


по идее, должен получится такой массив:
Код

аррай (3) (
   [0] => аррай( изЧайлд => 0, айди=> 123, текст=>"собсно текст")
   [1] => аррай( изЧайлд => 1, айди=> 124, текст=>"собсно ответ")
   [2] => аррай( изЧайлд => 1, айди=> 125, текст=>"собсно ответ на ответ")
   [3] => аррай( изЧайлд => 0, айди=> 129, текст=>"собсно новый комент")
)


а еще лучше - сделать это хранимой процедурой!

Добавлено через 7 минут и 37 секунд
http://forum.vingrad.ru/index.php?showtopi...t&p=1482809
вот сдесь, skyboy, показал хорошую тему... там есть примеры рекурсии.. аж две,одна сразу, вторая ниже и для ООП 
PM MAIL   Вверх
igorold
Дата 27.8.2010, 13:19 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: 5
Всего: 17



очень просто - через left join

что-то типа:

Код

select C.description from Comment left join Comment C on C.id0=Comment.id where Comment.id0=0 order by  Comment.id, C.id;



--------------------
... у семи нянек 14 сисек ...  
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
library
Дата 1.9.2010, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 28.3.2008

Репутация: нет
Всего: нет



Что то я не очень понял вот эту часть 

on C.id0=Comment.id where Comment.id0=0

И что впринципе должно получиться на входе? Двумерный массив комментариев из БД в нужном порядке?


PM MAIL   Вверх
igorold
Дата 2.9.2010, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: 5
Всего: 17



Да, а проверить запрос не пробовал?

Это сообщение отредактировал(а) igorold - 2.9.2010, 14:29


--------------------
... у семи нянек 14 сисек ...  
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.1399 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.