如果这是重复,我很抱歉,但我找不到真正回答我问题的任何内容,因为它非常具体。
我正在使用php和mysql创建一个论坛,到目前为止一直很好,但我想根据最近发布的日期对每个类别中的主题进行排序。
我的数据库结构是:
Table: threads
Fields: name, f_id, t_id
Table: posts
Fields: author, date, post, t_id, p_id
threads包含线程的名称,它所在论坛的f_id,以及它自己的自动增量线程ID。 posts有作者,日期,帖子,它所在线程的t_id,以及自动增量帖子id。为此,第二个帖子的ID总是比第一个帖子更高,即使帖子是在另一个帖子中制作的。
当我想在特定论坛中显示所有主题时,我的问题就出现了。我目前使用此代码:
$t_query = mysqli_query($link, "SELECT name, t_id FROM threads WHERE f_id = ".$f_id."");
echo "<table><tr><td>Name</td><td>Author</td><td>Date</td></tr>";
while($rowt = mysqli_fetch_array($t_query)) {
$p_query = mysqli_query($link, "SELECT author, DATE_FORMAT(date, '%r on %c/%e/%Y') as date_f, p_id FROM posts WHERE t_id = ".$rowt['t_id']." LIMIT 1");
echo "<tr><td><a href=\"../pages/post.php?t_id=",htmlentities($rowt['t_id']),"\">",htmlentities($rowt['name']),"</a></td>";
while($rowp = mysqli_fetch_array($p_query)){
echo "<td>",htmlentities($rowp['author']),"</td><td>",htmlentities($rowp['date_f']),"</td></tr>";
}
echo "</table>";
这样可以正常工作,除了我不能按日期排序,因为日期在帖子中,我的第一个循环从线程中获取。我需要完成的是一个连接,它将从帖子中获取最高p_id的日期,其中t_id等于线程中的t_id。
重新阅读之后,它似乎有点令人困惑,但我希望有人可以帮助我加入查询和调整我的PHP。
谢谢,沙夫。
答案 0 :(得分:2)
您只需要通过max:
进行分组和订购的联接SELECT t.name, t.t_id FROM threads t
INNER JOIN posts p ON p.t_id = t.t_id
WHERE t.f_id = ID
GROUP BY t.name, t.t_id
ORDER BY MAX(p.date)
假设每个帖子中至少有一个帖子,因为这个查询不会找到空的线程 - 为此,你需要使用外连接。
答案 1 :(得分:1)
我假设您想按照最新帖子的日期对线程列表进行排序,对吧?加入帖子两次,一次是最近的日期,第二次加入以确保其中没有新的帖子。例如......
SELECT t.name, t.t_id
FROM threads t
JOIN posts p1 ON (p1.t_id = t.t_id)
LEFT JOIN posts p2 ON (p2.t_id = t.t_id AND p2.p_id > p1.p_id)
WHERE p2.p_id IS NULL
ORDER BY p1.date;