Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как правильно составить запрос LIMIT
 
 автор: zorg84   (18.02.2014 в 00:55)   письмо автору
 
 

Сделал вывод древовидных комментариев
вид таблицы выглядит примерно так


id            text           parent_id
2        bla bla          0
3        bla                0
4        bla                3
5        bla                2
6        bla                3


Комментарии выводим рекурсией
Если parent_id == 0, корневой элемент
Иначе это чей-то потомок
Всё работает
Столкнулся с проблемой, когда комментарии решил выводить по 10 записей.
Мне надо чтобы LIMIT распространялся только на поля где parent_id==0
Короче говоря чтобы выводилось 10 основных коментрие, а под-комментарии выводились все без ограничений.

Как правильно составить запрос?

$sql = "SELECT c.id,
                              c.text,
                              c.id_user,
                     c.parent_id, 
                    u.miniavatar
                             FROM com AS c 
                             LEFT JOIN  
                             users AS u ON (u.id=c.id_user)
                             WHERE  c.poluchatel=$cat  DESC LIMIT 0, 10";

  Ответить  
 
 автор: Valick   (18.02.2014 в 09:07)   письмо автору
 
   для: zorg84   (18.02.2014 в 00:55)
 

SELECT id FROM com WHERE parent_id=0 LIMIT 0, 10

получаешь id с которыми надо работать

  Ответить  
 
 автор: zorg84   (19.02.2014 в 03:13)   письмо автору
 
   для: Valick   (18.02.2014 в 09:07)
 

А в одном запросе это возможно?

  Ответить  
 
 автор: Valick   (19.02.2014 в 09:48)   письмо автору
 
   для: zorg84   (19.02.2014 в 03:13)
 

странное желание, при условии что
"Комментарии выводим рекурсией"
__
гугли про nested sets

  Ответить  
 
 автор: zorg84   (19.02.2014 в 21:10)   письмо автору
 
   для: Valick   (19.02.2014 в 09:48)
 

$sql1 = "SELECT id FROM com WHERE parent_id=0 LIMIT 0, 10"
$result1 = $db_li->query($sql1);
while($row1 = $result1->fetch_assoc())
{
echo $row1["id"];

$sql2 = "SELECT id FROM com WHERE parent_id=$row1[id]"
$result2 = $db_li->query($sql2);
while($row2 = $result2->fetch_assoc())
{

echo $row2["id"];

}
}

Такой цикл работает, но это неверно так-как запрос в цикле поэтому я и спрашивал о одном запросе

Или всё-таки можно так?

  Ответить  
 
 автор: Valick   (19.02.2014 в 22:05)   письмо автору
 
   для: zorg84   (19.02.2014 в 21:10)
 

реляцонная БД не предназначена для хранения деревьев
поэтому тут либо запросы в цикле (проще всего), либо nested sets (сложная организация, медленное добавление и удаление, но зато оптимальная выборка)
есть еще вариант извлекать одним запросом (в некоторых случаях всю базу целиком) и разбирать на дерево средствами РНР, что тоже не "зер гуд"

  Ответить  
 
 автор: zorg84   (19.02.2014 в 22:15)   письмо автору
 
   для: Valick   (19.02.2014 в 22:05)
 

Короче делать в цикле. Спасибо

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования