$threads = mysql_query("SELECT DISTINCT t.id, t.title
FROM threads t LEFT JOIN comments c ON t.id = c.parentID
ORDER BY c.date DESC");
while ($thread = mysql_fetch_assoc($threads)) {
echo "<li><a href=\"?threadID=$thread[id]\">".htmlspecialchars($thread['title'])."</a></li>\n";
}
任何人都可以在此代码中看到问题吗?它不会像我想要的那样工作。我希望它是最新评论的线程,以及下一个最新的等等。
echo $ thread [parentID]没有回应
注释:
id,comment,parentID,date
答案 0 :(得分:2)
您按照DISTINCT
列表中的列进行排序。
这是MySQL
中的有效语法,但此ORDER BY
毫无意义。
此语法为MySQL
extension,此查询将在四大的任何其他RDBMS
引擎中失败。
在DISTINCT
或GROUP BY
中column
的相同值始终对应相同值的情况下,它用于简化SELECT
和ORDER BY
个查询GROUP BY
或DISTINCT
中的列。
如果您的情况如此,c.date
的每个值都可以有t.id
的多个值,而c.date
选择的ORDER BY
值远远不是SELECT t.id, t.title,
(
SELECT c.date
FROM comments c
WHERE c.parent_id = t.id
ORDER BY
c.date DESC
LIMIT 1
) lastcomment
FROM threads t
ORDER BY
ISNULL(lastcomment), lastcomment
保证(它可以是最后一个值,第一个值或任何其他值)。
重写您的查询:
{{1}}
答案 1 :(得分:0)
尝试在MySQL Query浏览器中运行数据查询,看看是否返回任何结果。如果是,那么问题在于您的回声,而不是您的查询。
答案 2 :(得分:0)
我有一段时间没有使用MySQL,所以我知道这在tSQL中有用。你可以尝试:
SELECT DISTINCT t.id, t.title
FROM threads t LEFT JOIN comments c ON t.id = c.parentID AND
c.id = (SELECT MAX(c.id) FROM comments where comments.parentID = t.id)
ORDER BY c.date DESC
评论中有很多行,这很容易变慢。如果您发现性能问题,可以将最后一个注释日期存储在线程中。
答案 3 :(得分:0)
我尝试了这个,它听起来像你想要的那样
SELECT DISTINCT t.id, t.title FROM threads AS t LEFT JOIN comments AS c ON t.id = c.parent_id ORDER BY c.date DESC
我改变的唯一真实就是使用
FROM threads AS T
答案 4 :(得分:-1)
我不确定您要实现的目标,但如果您想回显parentID,则需要将其包含在查询中。
$threads = mysql_query("SELECT DISTINCT t.id, t.title, c.parentID
FROM threads t LEFT JOIN comments c ON t.id = c.parentID
ORDER BY c.date DESC");