[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите новичку балбесу с запросом
kss245
Не уверен куда точно писать. Огромная просьба помочь мне в выборке данных из таблицы. Есть скрипт (приклеплен). Мне нужно, чтоб темы древовидного форума выводились в порядке DESC, а ответы на темы выводились в обратном порядке (ASC). Где и как нужно подправить скрипт. Очень прошу, помогите, мучаюсь уже неделю. И если совсем не сложно, то можно подправить формат даты сообщения.


function DelTree($ref, $lvl, $ta) { 
$result=mysql_query("SELECT id,msg,ans,author,topic,date,host FROM $ta WHERE ans=".$ref." ORDER BY id desc");
global $lvl;
mysql_query("delete from $ta where id='$ref'");
$lvl++;
if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_array($result) ) {
$ID1 = $row["id"];
mysql_query("delete from $ta where id='$ID1'");
DelTree($ID1, $lvl, $ta);
$lvl--;
}
}
}

function ShowTree($ref, $lvl, $mssge, $log, $pas, $tb) {
global $lvl;
$result=mysql_query("SELECT id,msg,ans,author,topic,date,host FROM $tb WHERE ans=".$ref." ORDER BY id desc");
$lvl++;
if (mysql_num_rows($result) > 0) {
echo("<UL type=square>\n");
while ($row = mysql_fetch_array($result) ) {
$ID1 = $row["id"];
echo("<LI>\n");
echo("<a href=\"$PHP_SELF?cmd=show&id=".$ID1."\" target=\"mes\">".$row["topic"]."</a><font style=\"font-size:80%\"> - прислано ".$row["author"]." @ ".$row["date"]."</font>");
if ($mssge==1){
echo "<form method=\"POST\"><input type=\"hidden\" name=\"cmd\" value=\"del\"><input type=\"hidden\" name=\"login\" value=\"$log\"><input type=\"hidden\" name=\"id\" value=\"$ID1\"><input type=\"hidden\" name=\"pass\" value=\"$pas\"><input type=\"submit\" value=\"удалить\"></form>";
}
else { echo "\n"; }
ShowTree($ID1, $lvl, $mssge, $log, $pas, $tb);
$lvl--;
}
echo("</UL>\n");
}
}

if (!isset($cmd) && !isset($login)) {
echo "<html><head><title>Форум</title><head><style>a {text-decoration: none; font-weight: bolder;}</style></head>";
echo "<body>";
ShowTree(0, 0, 0, 0, 0, $t);
}
if (isset($cmd) && isset($id) && $cmd=="show"){
echo "<html><head><title>Форум</title>";
$a=mysql_query("select id,msg,ans,author,topic,date,host from $t where id='$id'");
$b=mysql_fetch_row($a);
$m=eregi_replace("\n","<br>",$b[1]);
$l=gethostbyaddr($REMOTE_ADDR);
$n=date("r");
$p=eregi_replace("\n","\n:",$b[1]);
echo "<table width=100% border=1><tr><td width=50% align=left bgcolor=yellow><b>Автор: </b>$b[3] <b>Время: </b>$b[5]";
echo " <b>ID: </b>$b[0]<br><b>Host: </b>$b[6] <b>Тема: </b>$b[4]</td><td width=50% align=center bgcolor=yellow>";
echo "<b>Ваш ответ:</b></td></tr><tr><td valign=top align=justify>$m</td><td align=center><center><form action=$PHP_SELF method=\"POST\" !TARGET=_SELF><table align=center border=0><tr><td align=right>Name: </td><td align=left><input type=\"text\" name=\"name\" size=\"40\"></td></tr><tr><td align=right>Subject: </td><td align=left><input type=\"text\" name=\"topic\" size=\"40\" value=\"Re: $b[4]\"></td></tr><input type=\"hidden\" name=\"cmd\" value=\"new\"><input type=\"hidden\" name=\"time\" value=\"$n\"><input type=\"hidden\" name=\"ans\" value=\"$b[0]\"><input type=\"hidden\" name=\"host\" value=\"$l\"><tr><td align=right>Message: </td><td align=left><textarea name=\"msg\" rows=7 cols=30>:$p</textarea></td></tr><tr><td align=center colspan=2><input type=\"submit\" value=\"Отправить\"> <input type=\"reset\" value=\"Очистить\"></td></tr></table></form></center></td></tr></table ><p align=right><a href=\"$PHP_SELF?cmd=ac\" style=\"text-decoration: none\"><font size=\"-2\">restricted area</font><br></a><center><font size=\"-2\">Скрипт предоставлен <a href=http://www.chemport.ru>www.chemport.ru</a></font></center>" ;
}
if (isset($cmd) && $cmd=="new"){
mysql_query("insert into $t (msg,ans,author,topic,date,host) values ('$msg','$ans','$name','$topic','$time','$host')");
echo "
<script language=
\"JavaScript\">
<!--
parent.location.href=
\"index.htm\";
//-->
</script>"
;
}
if (isset($cmd) && $cmd=="mes"){
$l=gethostbyaddr($REMOTE_ADDR);
$n=date("r");
echo "<html><head><title>Форум</title><center><h3>Новая тема:</h3><form action=$PHP_SELF method=\"POST\" !TARGET=_SELF><table align=center border=0><tr><td align=right>Name: </td><td align=left><input type=\"text\" name=\"name\" size=\"40\"></td></tr><tr><td align=right>Subject: </td><td align=left><input type=\"text\" name=\"topic\" size=\"40\" value=\"$b[4]\"></td></tr><input type=\"hidden\" name=\"cmd\" value=\"new\"><input type=\"hidden\" name=\"time\" value=\"$n\"><input type=\"hidden\" name=\"ans\" value=\"$b[0]\"><input type=\"hidden\" name=\"host\" value=\"$l\"><tr><td align=right>Message: </td><td align=left><textarea name=\"msg\" rows=7 cols=30>$k</textarea></td></tr><tr><td align=center colspan=2><input type=\"submit\" value=\"Отправить\"> <input type=\"reset\" value=\"Очистить\"></td></tr></table></form></center><p align=right><a href=\"$PHP_SELF?cmd=ac\" style=\"text-decoration: none\"><font size=\"-2\">restricted area</font><br></a><center><font size=\"-2\">Скрипт предоставлен <a href=http://www.chemport.ru>www.chemport.ru</a></font></center>" ;
}
if (isset($login) && $login==$admin && isset($pass) && $pass==$password && !isset($cmd)){
echo "<center><h3>При удалении сообщения удаляются и все ответы на него!!!</h3></center>";
ShowTree(0,0,1,$login,$pass,$t);
}
if (isset($login) && $login==$admin && isset($pass) && $pass==$password && isset($cmd) && $cmd=="del") {
DelTree($id,0,$t);
header("Location:$PHP_SELF?login=$admin&pass=$password");
}
if (isset($cmd) && $cmd=="ac"){
echo "<form action=\"$PHP_SELF\" method=\"POST\"><table align=center><tr><td align=right>login: </td><td align=left><input type=\"text\" name=\"login\"></td></tr><tr><td align=right>пароль: </td><td align=left><input type=\"password\" name=\"pass\"></td></tr><tr><td collspan=2 align=center><input type=\"submit\" value=\"oтправить\">  <input type=\"reset\" value=\"очистить\"></td></table></form>";
}
echo "</body></html>";
?>






Спустя 4 минуты, 6 секунд (26.01.2011 - 18:16) kss245 написал(а):
Прикрепляю еще рисунок самого форума: user posted image

Спустя 7 минут, 41 секунда (26.01.2011 - 18:23) Snus написал(а):
kss245
У тебя как раз там сортировка DESC

Спустя 2 минуты, 16 секунд (26.01.2011 - 18:26) kss245 написал(а):
Да, это сортировка тем, а сортировка сообщений тоже DESC, а мне нужно ASC - - - нет разделений на сортировку тем и сообщений, не знаю как разделить. Должгны быть две разные сортировки для тем и ответов

Спустя 50 секунд (26.01.2011 - 18:26) inpost написал(а):
kss245
У тебя идёт одна выборка, поэтому либо так, либо так.
Тут либо разделить логику выборки двумя запросами, либо перевести всё в массив и отдельные части сортировать.
... хотя, давай так, где именно у тебя в скрипте говорится, что это основной вопрос, а то уже ответы на него?

Спустя 1 минута, 36 секунд (26.01.2011 - 18:28) kss245 написал(а):
inpost, ну я совсем не соображаю что ты пишешь. Я просто ЧАЙНИК. Как это сделать?

Спустя 5 минут, 22 секунды (26.01.2011 - 18:33) kss245 написал(а):
Поля таблицы:
id
msg
ans
author
topic
date
host

Спустя 20 минут, 1 секунда (26.01.2011 - 18:53) kss245 написал(а):
Новым темам присваивается ans = 0, скрипт 100% работает

Спустя 43 минуты, 14 секунд (26.01.2011 - 19:37) inpost написал(а):
Вот есть тема, есть комментарий. Чем они отличаются по полям, где именно прописано, что это коммент, а это тема

Спустя 12 минут, 52 секунды (26.01.2011 - 19:49) kss245 написал(а):
Нашел связь. Когда создается тема ей присваивается ID попорядку и ans = 0, когда отвечается в теме, ответу присвается ID опорядку и ans равным ID теме. И потом сортируется по датам.

Спустя 2 часа, 21 минута, 5 секунд (26.01.2011 - 22:11) inpost написал(а):
Плохая структура, сложно как-то. Можно нагрузить систему с вложенными обращениями.
Первая выборка всех записей, где ans = 0, И внутри цикла перебора выводить сначала данные, потом второй цикл, где ans = id этого перебора

SELECT * WHERE ans=0 ORDER BY `date` DESC...
while($row = ...)
{
ТУТ ТЕМА;
SELECT * WHERE ans=$row['id'] ORDER BY `date` ASC;
while()
{
тут ответы.
}
}

Сделай в такой структуре вывод. Я зарание не писал всё за тебя, а лишь показал, как это сделать.

Спустя 7 часов, 45 минут, 32 секунды (27.01.2011 - 05:56) kss245 написал(а):
Буду разбираться и пробывать. Если что обязательно напишу!

Спустя 2 дня, 3 часа, 17 минут, 23 секунды (29.01.2011 - 09:13) kss245 написал(а):
Ничего не получается, либо уж я совсем ничего не понимаю. Надо учиться sad.gif

Спустя 4 часа, 18 минут, 34 секунды (29.01.2011 - 13:32) inpost написал(а):
kss245
Это итак очевидно было для меня с самого начала. Начни с маленького, не берись сразу за сложное.

Спустя 2 минуты, 13 секунд (29.01.2011 - 13:34) Snus написал(а):
inpost
Запрос в запросе - нот гут unsure.gif

Спустя 15 минут, 19 секунд (29.01.2011 - 13:50) inpost написал(а):
Snus
Смотри какое дело, человек почти ничего не понимает, я мог бы предложить сделать запрос, потом всё в массив, потом второй запрос с WHERE ** IN (explode(',',$array)), и т.д. Потом сгруппировать и вывести, но если человек не может такой простой запрос в запросе сделать, нет смысла давать что-то более сложное. Я лишь попытался упросить как только можно решение этой задачи.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.