2013-07-07 204 views
0

我在某种类型的留言板上工作,并且除了一小部分外,我的所有内容都正在运行,这些线程需要按最新帖子的日期/时间排序在他们(标准的论坛格式),即时通讯包裹着我的头很多麻烦。使用另一个查询的结果对查询的结果进行排序

这是我使用的querys,我知道它不漂亮,它不安全,一旦我学会了如何正确地做它,我将重新加工它们。

$sql = "SELECT Thread_ID, Thread_Title, Board_ID, Author FROM threads WHERE Board_ID='$Board_ID' LIMIT $offset, $rowsperpage"; 
$result = mysql_query($sql, $conn) or trigger_error("SQL", E_USER_ERROR); 

while ($row = mysql_fetch_assoc($result)) 
{ 

$Thread_ID = $row['Thread_ID']; 
$Thread_Title = $row['Thread_Title']; 
$Board_ID = $row['Board_ID'];  
$Author = $row['Author']; 

$getauthor = mysql_query("SELECT * FROM members WHERE Member_ID='$Author'"); 
while ($row = mysql_fetch_assoc($getauthor)) 
{ 
$Post_Author = $row['Post_As']; } 


$postcount = mysql_query("SELECT Post_ID FROM posts WHERE Thread_ID='$Thread_ID'");     
$Posts = mysql_num_rows($postcount); 

$getlatest = mysql_query("SELECT * FROM posts WHERE Thread_ID='$Thread_ID' ORDER by Post_DateTime DESC LIMIT 1"); 
while ($row = mysql_fetch_assoc($getlatest)) 
{ 
$Post_DateTime = time_ago($row['Post_DateTime']); 
$Member_ID = $row['Member_ID']; } 

$getmember = mysql_query("SELECT * FROM members WHERE Member_ID='$Member_ID'"); 
while ($row = mysql_fetch_assoc($getmember)) 
{ 
$Post_As = $row['Post_As']; } 

那么什么即时试图做的是排序$由$ getlatest SQL中,我尝试添加上述$ sql中的另一个查询做了基本相同的$ getlatest,然后通过,但可惜它只是打破了$ SQL命令一切。

我知道我必须做一个变量来对$ sql进行排序,但是那个变量让我很生气。

任何帮助,将不胜感激,谢谢。根据要求

当前的错误消息:

致命错误:SQL - 未知列 '的条款' posts2.LatestPost“中 - 选择threads.Thread_ID,threads.Thread_Title,threads.Board_ID,threads.Author,Sub1的.LatestPost,Sub1.PostCount,members.Post_As,members2.Member_ID AS LastPostMemberID,members2.Post_As AS LastPostMemberPostAs FROM线程INNER JOIN(选择的thread_id,MAX(posts.Post_DateTime)AS LatestPost,COUNT(*)AS PostCount来自帖子GROUP BY的thread_id )Sub1 ON threads.Thread_ID = Sub1.Thread_ID INNER JOIN members ON ON threads.Author = members.Member_ID INNER JOIN posts posts2 ON posts2.Thread_ID = Sub1.Thread_ID AND posts2.LatestPost INNER JOIN members members2 ON members2.Member_ID = posts2.Member_ID WHERE threads.Board_ID ='1'ORDER BY Sub1.LatestP OST DESC LIMIT 0,25在C:\ WAMP \ WWW \论坛\ \包括在threads.php线路86

回答

0

你应该能够做到这一点使用这样的事情你的第一个查询: -

$sql = "SELECT threads.Thread_ID, threads.Thread_Title, threads.Board_ID, threads.Author, MAX(posts.Post_DateTime) AS LatestPost 
     FROM threads 
     LEFT OUTER JOIN posts ON threads.Thread_ID = posts.Thread_ID 
     WHERE threads.Board_ID='$Board_ID' 
     GROUP BY SELECT threads.Thread_ID, threads.Thread_Title, threads.Board_ID, threads.Author 
     ORDER BY LatestPost DESC 
     LIMIT $offset, $rowsperpage"; 

编辑

未测试以下,但看着你的选择我认为你可能可以把它放在一起到一个单一的选择。事情是这样的: -

$sql = "SELECT threads.Thread_ID, threads.Thread_Title, threads.Board_ID, threads.Author, Sub1.LatestPost, Sub1.PostCount, members.Post_As, members2.Member_ID AS LastPostMemberID, members2.Post_As AS LastPostMemberPostAs 
     FROM threads 
     INNER JOIN (SELECT Thread_ID, MAX(posts.Post_DateTime) AS LatestPost, COUNT(*) AS PostCount FROM posts GROUP BY Thread_ID) Sub1 
     ON threads.Thread_ID = Sub1.Thread_ID 
     INNER JOIN members 
     ON threads.Author = members.Member_ID 
     INNER JOIN posts posts2 
     ON posts2.Thread_ID = Sub1.Thread_ID AND posts2.Post_DateTime = Sub1.LatestPost 
     INNER JOIN members members2 
     ON members2.Member_ID = posts2.Member_ID 
     WHERE threads.Board_ID='$Board_ID' 
     ORDER BY Sub1.LatestPost DESC 
     LIMIT $offset, $rowsperpage"; 
$result = mysql_query($sql, $conn) or trigger_error("SQL", E_USER_ERROR); 

while ($row = mysql_fetch_assoc($result)) 
{ 

    $Thread_ID = $row['Thread_ID']; 
    $Thread_Title = $row['Thread_Title']; 
    $Board_ID = $row['Board_ID'];  
    $Author = $row['Author']; 
    $Post_Author = $row['Post_As']; 
    $Posts = $row['PostCount']; 
    $Post_DateTime = time_ago($row['LatestPost']); 
    $Member_ID = $row['LastPostMemberID']; 
    $Post_As = $row['LastPostMemberPostAs']; 
+0

这打破了一整套querys的,我不明白一半查询正在试图做的,但它看起来像它试图通过犯规LatestPost排序存在任何线程或职位表 – user2558771

+0

它按LatestPost,这是最大的发布日期为每个线程。看看MAX在SELECT – Kickstart

+0

本的第一行对错误的在我的致命错误引发回:SQL在C:\ WAMP \ WWW \论坛\ \包括在threads.php线86线86 $结果= mysql_query ($ sql,$ conn)或trigger_error(“SQL”,E_USER_ERROR); – user2558771

相关问题