0

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

我现在想在显示主题时显示每个主题的各种标签。由于一个主题有多个标签,所以当我在下面进行查询时,我得到多行并且主题显示多次,每行一次。我认为我不能使用 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))以便显示记录集的行。我希望它显示一次主题,但由于为标签创建了多行,因此它显示了多次。

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

4

2 回答 2

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
于 2012-06-01T13:55:50.883 回答
0

如果您对 ON 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
}
于 2012-06-01T14:01:13.860 回答