|
|
|
| У себя в форуме пытаюсь вывести первых 5 сообщений, дописываю LIMIT 5, только не получается. Помогите мне найти ошибку, ибо только изучаю MySQL
Вот код
<?
// Иначе динамическая генерация
// Выбираем первое сообщение темы
$query = "SELECT * FROM $tbl_posts
WHERE id_theme = $id_theme AND
hide != 'hide'
LIMIT 5";
$pst = mysql_query($query);
if(!$pst) puterror("Ошибка при обращении к теме: $id_theme");
$posts = mysql_fetch_array($pst);
// Рекурсивно выводим все подчинённые сообщения
@putpost($posts['id_post'],
$id_theme,
2,
$lasttime,
$current_author,
$id_forum,
$lineforum,
$lineforumdown,
$skin,
$themes['hide'],
$tbl_posts,
$tbl_themes);
?>
|
| |
|
|
|
|
|
|
|
для: ols
(24.07.2008 в 00:54)
| | > только не получается
что именно?
Дамп таблицы?
mysql_error(); ?
Значения переменных $tbl_posts и $id_theme? | |
|
|
|
|
|
|
|
для: ols
(24.07.2008 в 00:54)
| | Ошибка как минимум в том, что Вы забыли сортировку ( ... ORDER BY `id` DESC .... ).
Вместо `id` - то поле, по которому Вы можете определить какое из сообщений добавлено позже или раньше. | |
|
|
|
|
|
|
|
для: BinLaden
(24.07.2008 в 01:19)
| | внутри рекурсивной процедуры что дописывай LIMIT 5 в запрос, что не дописывай - эффект будет чисто эстетический
Точно также и с ORDER BY.:) | |
|
|
|
|
|
|
|
для: Trianon
(24.07.2008 в 01:37)
| | А я не увидел где тут есть какая-то рекурсия...Вижу только вызов какой-то функции. | |
|
|
|
|
|
|
|
для: BinLaden
(24.07.2008 в 02:02)
| | В комменте что то написано про рекурсию. | |
|
|
|
|
|
|
|
для: BinLaden
(24.07.2008 в 02:02)
| | Человек привел фрагмент функции putpost(), которая выводит сообщения в виде дерева. В частности в этом форуме. Заголовок привести постеснялся, видимо... | |
|
|
|
|
|
|
|
для: BinLaden
(24.07.2008 в 02:02)
| | Рекурсия есть. Просто из utils.php вызывается функция putpost:
<?
function putpost($id_post,
$id_theme,
$indent,
$last_time,
$current_author,
$id_forum,
$lineforum,
$lineforumdown,
$skin,
$themehide,
$tbl_posts,
$tbl_themes)
{
// Выводим сообщение с id_post == $id_post
$query = "SELECT * FROM $tbl_posts
WHERE id_theme = $id_theme AND
id_post = $id_post AND
hide != 'hide' ORDER BY 'id_posts' LIMIT 5";
$psts = mysql_query($query);
if ($psts)
{
$posts = mysql_fetch_array($psts);
post_down($id_post,
$id_theme,
$indent,
$last_time,
$current_author,
$id_forum,
$posts['id_author'],
$posts['author'],
convertdate($posts['time'],0),
$posts['putfile'],
$posts['name'],
$posts['url'],
$skin,
$themehide,
$parent_author,
convertdate($parent_time,0),
$parent_id_author,
$tbl_posts,
$tbl_themes
);
// Выводим подчинённые сообщения
$query = "SELECT * FROM $tbl_posts
WHERE id_theme = $id_theme AND
parent_post = $id_post AND
hide != 'hide'
ORDER BY 'id_post' LIMIT 5";
$psts = mysql_query($query);
if ($psts)
{
$num_rows=mysql_num_rows($psts);
while($posts = mysql_fetch_array($psts))
{
// Рекурсивно вызываем функцию putpost для обработки подчинённых постов
putpost($posts['id_post'],
$id_theme,
$temp,
$last_time,
$current_author,
$id_forum,
$lineforum,
$lineforumdown,
$skin,
$themehide,
$tbl_posts,
$tbl_themes
);
}
} else puterror("Ошибка при выборке сообщений темы...1");
}
else puterror("Ошибка при выборке сообщений темы...");
}
?>
|
>Значения переменных $tbl_posts и $id_theme?
$tbl_posts = posts и $id_theme=themes
Прописал я сортировку все равно что-то я не так делаю. Как и прежде выводть все сообщения в теме | |
|
|
|
|
|
|
|
для: ols
(24.07.2008 в 02:09)
| | В рамках выбранной методики вывода постов сделать постраничный вывод Вам не удастся.
Разработчики форума, кстати, считают, что дерево сообщений и постраничный показ в принципе друг другу противоречат.
Подумайте... может он и Вам не нужен? | |
|
|
|
|
|
|
|
для: Trianon
(24.07.2008 в 02:13)
| | >Подумайте... может он и Вам не нужен?
Дело в том у меня вап сайт и данный форум переделал под себя, добавил вмл разметку страниц. Все работает отлично, движок лайтфорум просто меня спасает. Но дело в том что некоторые телефоны не смогут загржуть страницу больше 10-15 кб, да и вообще телефон и это не комппьютер все равно у него наряду с компьютером оперативка очеь мала
И что же тогда посоветуете сдлеать? переписать код по-другому, отказаться от рекурсии? | |
|
|
|
|
|
|
|
для: ols
(24.07.2008 в 02:27)
| | Есть несколько способов.
1. изменить технологию хранения дерева на nested sets. Для отображения NS-дерева рекурсия не требуется. Вариант наиболее чистый, как мне представляется.
2. Вместо того чтоб рекурсивной процедурой выводить сообщения в поток браузера - сохранять их id и уровни вложенности в массив. Вывод постов по идентификаторам из массива уже можно сделать постраничным. Кстати, так можно изрядно сэкономить на запросах к БД. Вариант посерее, но тоже проходной.
3. Можно сохранять в массив не идентификаторы, а сами посты. Вариант довольно отвратный.... но зато с минимальными переделками кода. Я так понимаю, для Вас это более чем критично. | |
|
|
|
|
|
|
|
для: Trianon
(24.07.2008 в 02:40)
| | >1. изменить технологию хранения дерева на nested sets. Для отображения NS-дерева рекурсия не требуется. Вариант наиболее чистый, как мне представляется.
Что-то я не догоняю. Объясните по подробнее пожалуйста, слова мне не знакомые.
В форуме у меня вывод постов выводится от старых к новым, а переключен ия вида я убрал. | |
|
|
|
|
|
|
|
для: ols
(24.07.2008 в 02:52)
| | >>1. изменить технологию хранения дерева на nested sets. Для отображения NS-дерева рекурсия не требуется. Вариант наиболее чистый, как мне представляется.
>Что-то я не догоняю. Объясните по подробнее пожалуйста, слова мне не знакомые.
Незнакомые слова ищутся в поиске.
http://softtime.ru/forum/srch.php?id_forum=3&name=nested+sets&numberthemes=30&srchwhere=2&logic=1
>В форуме у меня вывод постов выводится от старых к новым, а переключен ия вида я убрал.
Коль так, зачем тогда рекурсивную функцию оставили?
Нерекурсивный вариант переводится на постраничное представление стандартным способом..
И все предыдущие рассуждения теряют смысл. | |
|
|
|
|
|
|
|
для: Trianon
(24.07.2008 в 03:02)
| | - | |
|
|
|
|
|
|
|
для: Trianon
(24.07.2008 в 03:02)
| | Объясните пожалуйста тогда следующее. Вот данный код
<?
$query = "SELECT * FROM posts
WHERE id_theme = $id_theme AND hide = 'hide'
LIMIT 5";
$pst = mysql_query($query);
$posts = mysql_fetch_array($pst);
if ($posts) echo $posts['name'];
?>
|
Почему данный запрос выводит только первое сообщение? | |
|
|
|
|
|
|
|
для: ols
(24.07.2008 в 04:15)
| | Запрос то может выбирает и больше, только вы выводите именно первое из выборки. | |
|
|
|
|
|
|
|
для: sms-send
(24.07.2008 в 04:44)
| | хм. ну как тогда мне можно вывести первые 5 тем? | |
|
|
|
|
|
|
|
для: ols
(24.07.2008 в 06:35)
| | так :
"SELECT * FROM posts WHERE id_theme = $id_theme AND hide = 'hide' LIMIT 0,5"
|
или так:
"select * from posts ORDER BY `posts`.`time` DESC limit 0,5"
|
<?
$vquery = "SELECT * FROM posts WHERE id_theme = $id_theme AND hide = 'hide' LIMIT 0,5";
$result = mysql_query($vquery);
while ($row = mysql_fetch_array($result)) :
$row['Название столбца'];
endwhile;
?>
|
..наверное... )) | |
|
|
|