我有一个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))
完成的,以便显示记录集的行。我希望它显示一次主题,但由于为标签创建了多个行,它会多次显示。
我是否必须放弃加入并执行子查询?感谢您的任何建议。
答案 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
}