php - 使用另一个查询的结果对一个查询的结果进行排序

标签 php mysql

我正在开发某种留言板,除了一小部分之外,我已经将所有内容都运行起来,线程需要按其中最新帖子的日期/时间(标准论坛格式)进行排序,我有我的脑子里有很多麻烦。

这是我使用的查询,我知道它不漂亮而且不安全,一旦我学会了如何正确执行它,我将重新处理它们。

$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 进行排序,但正是这个变量让我发疯。

如有任何帮助,我们将不胜感激,谢谢。

按要求显示当前错误消息:

fatal error :SQL - “on 子句”中的未知列“posts2.LatestPost” - SELECTthreads.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 (SELECT Thread_ID, MAX(posts.Post_DateTime) AS LastPost, COUNT(*) AS PostCount FROM posts GROUP BY Thread_ID) Sub1 ONthreads.Thread_ID = Sub1.Thread_ID INNER JOIN 成员ON 线程.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 WHEREthreads.Board_ID='1' ORDER BY Sub1。 LatePost DESC LIMIT 0, 25 in C:\wamp\www\forum\include\threads.php on line 86

最佳答案

您应该能够在第一个查询中使用类似的方法来完成此操作:-

$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";

编辑

未测试以下内容,但查看您的选择,我认为您可能可以将其组合到单个 SELECT 中。像这样的事情:-

$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']; 

关于php - 使用另一个查询的结果对一个查询的结果进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17516034/

相关文章:

php - CakePHP 中长时间运行 shell 的数据库连接问题

javascript - 为什么这个node-mysql插入会产生一个数组?

php - 切换到 mysqli 是个好主意吗?

php - 如何将 PDF 文件存储在 MySQL 数据库中?

PHP 从 HTML 类中获取文本

mysql - 在数据库中选择属于两个部门的员工

php - 我的 PHP 有问题

php - 使用 Laravel RouteNotifcationForMail() 发送到多个电子邮件地址?

php - Postgresql 给我一个 PHP 错误

MySQL:删除带有问号符号的列?