mySQL+php,在循环中显示来自另一个表的标记的相关帖子

mySQL+php,在循环中显示来自另一个表的标记的相关帖子,php,mysql,Php,Mysql,好的,我的首页上有5个标签,我想显示与每个标签相关的5条注释,标签存储在一个表中,注释存储在另一个表中。我在comments表中有一个名为relatedID的字段,它等于tags表id列。 标签按表中最后20个条目中排名最高的5个标签排序 我的问题是: $q = mysql_query("SELECT * FROM (SELECT * FROM tags WHERE countrycode='$lang[LANGUAGE]' ORDER BY timedate DESC LIMIT 20) tm

好的,我的首页上有5个标签,我想显示与每个标签相关的5条注释,标签存储在一个表中,注释存储在另一个表中。我在comments表中有一个名为relatedID的字段,它等于tags表id列。 标签按表中最后20个条目中排名最高的5个标签排序

我的问题是:

$q = mysql_query("SELECT * FROM (SELECT * FROM tags WHERE countrycode='$lang[LANGUAGE]' ORDER BY timedate DESC LIMIT 20) tmp, comments WHERE comments.related = '1' && comments.lang = '$lang[LANGUAGE]' && comments.relatedID = tmp.id ORDER BY tmp.rank ASC LIMIT 5");

while($result = mysql_fetch_array($q)) { 
echo $result['tag'],'<br />';
echo $result['comment'],'<br />';
}
我希望它看起来像这样:

标签1 评论1 评论2 评论3 评论4 评论5

标签2 评论1 评论2 评论3 评论4 评论5

标签3

等等

有什么简单的解决办法吗


现在它只显示相同的标签和相同的5条注释x5次。

只需进行第二次查询:

// Query tags
$q = mysql_query("...");

while($result = mysql_fetch_array($q)) { 
    echo $result['tag'],'<br />';
    // Query comments
    $q1 = mysql_query("SELECT * FROM comments WHERE ... LIMIT 5");
    while($result = mysql_fetch_array($q)) {
        echo $result['comment'],'<br />';
    }
}

您可以在一个查询中使用。上面的查询将返回5个排名靠前的标签的最后5条注释

SELECT *
FROM (
    SELECT 
        *,
        @nb:=if(@prev_id=tags.id,@nb+1,1) as nb_com,
        @prev_id:=tags.id
    FROM (SELECT @prev_id:=0, @nb:=0, @nb_tag:=0, @prev_tag:=0) x, tags
    INNER JOIN comments on comments.relatedId = tags.id
    WHERE comments.lang = '$lang[LANGUAGE]'
    ORDER BY tags.rank, comments.timedate DESC
) D
where nb_com <= 5
AND if(@prev_tag=id,@nb_tag:=@nb_tag,@nb_tag:=@nb_tag+1)
AND @nb_tag <= 5
AND @prev_tag:=id
我假设您的comments表中有一个timedate列。换成你喜欢的任何顺序

如果您想了解更多关于用户变量的信息,请查看以下内容


EDIT:query edited以删除限制

这看起来非常好,但现在我得到了一个错误:每个派生表都必须有自己的别名oop。修正:我没有测试过,抱歉。现在应该可以了。实际上,它毕竟不起作用,如果我将限制设置为25,它将显示前5个标签和前5条评论,然后显示评论和标签6&7,20次。如果我限制为5,它会显示5个标签,每个标签上有一条评论。好的,我已经编辑了我的答案。我只是在本地数据库上试用了一下,效果很好。它无法运行,它返回了我数据库中的所有条目。所以我选择了两个querys。谢谢你的努力。如果他有很多很多标签怎么办?@Timohoovinen如果他有很多香蕉怎么办?我猜他会提出一个新问题,告诉我们他的香蕉有什么问题。也许有人会告诉他使用限制和补偿。我们永远不会知道;