php / mysql标签查询架构

时间:2012-06-01 13:51:49

标签: php mysql join

我有一个3表标签系统,主题,标签和tagtopic。

我现在想在显示主题时显示每个主题的各种标签。由于一个主题有多个标签,因此当我执行下面的查询时,我会获得多行,主题会多次显示,每行一次。我不认为我可以使用groupby,因为我没有用列做任何数学。我真正想要的是每个主题,显示主题,然后是帖子的标签列表,如(对于Siri),'iphone,智能手机,Siri'。 表:

topics
id | name |userid
tags
id | topicid | topicname
tagtopic
id | tagid | topicid '

$sql = "SELECT * FROM `topics` t
LEFT JOIN `tagtopic` tagtopic
on t.id = tagtopic.topicid
WHERE t.id= '12'";

应该提到显示是使用while($row = mysql_fetch_array($res))完成的,以便显示记录集的行。我希望它显示一次主题,但由于为标签创建了多个行,它会多次显示。

我是否必须放弃加入并执行子查询?感谢您的任何建议。

2 个答案:

答案 0 :(得分:2)

您可以执行GROUP_CONCAT将所有标记放入以逗号分隔的单个字段中。

SELECT GROUP_CONCAT(tt.tagid) FROM topics t
JOIN tagtopic tt ON tt.topicid = t.topicid
WHERE t.id=12
GROUP BY t.id

答案 1 :(得分:0)

如果您对ONE AND ONLY ON主题执行此查询(由WHERE t.id = 12扣除)
while循环中:

var first = true;
while($row = mysql_fetch_array($res)) {
    if(first) {
        // PRINT THE TOPIC NAME
        $first = false;
    }
    // PRINT THE TAG ROW
}