一次从四个表中选择数据

时间:2012-03-15 12:24:26

标签: mysql select

+----+-------+---------+------+--------+--------+
|q_id|q_title|q_content|q_date|q_status|q_author|
+----+-------+---------+------+--------+--------+
| 1  |varchar| text    | int  |   int  |   int  |
+----+-------+---------+------+--------+--------+

这是第一个表:问题
标记表具有以下结构:

+------+--------+---------------+
|tag_id|tag_name|tag_description|
+------+--------+---------------+
| int  |varchar |     text      |
+------+--------+---------------+

第三个表格( question_tags )具有以下结构:

+----+--------+------+
| id | tag_id | q_id |
+----+--------+------+
|int |  int   | int  |
+----+--------+------+

最后一个表(用户)具有以下结构:

+----+----------+--------+
| id | username |password|
+----+----------+--------+
|int | varchar  |varchar |
+----+----------+--------+

我曾经用这个查询选择数据:

SELECT * , GROUP_CONCAT( tags.tag_name ) 
FROM questions 
LEFT JOIN users 
ON q_author = users.id 
LEFT JOIN question_tags 
ON questions.q_id = question_tags.q_id 
LEFT JOIN tags ON tags.tag_id = question_tags.tag_id 
GROUP BY questions.q_id

但它不再满足我的需求。另请注意,在 question_tags 表中,每个问题可以有多个标记,我想获取所有标记及其ID。

2 个答案:

答案 0 :(得分:1)

查询是正确的。如果你想要标签的ID:

SELECT * , GROUP_CONCAT( CONCAT(tags.tag_id,'=',tags.tag_name)) 

您希望输出看起来如何?

答案 1 :(得分:0)

尝试使用此代码,它应该按预期工作

 $tblQry = 'SELECT *,GROUP_CONCAT( tags.tag_name ) FROM questions 
                     LEFT JOIN (tags, question_tags, users)
                     ON (tags.tag_id=question_tags.tag_id 
                     AND questions.q_id=question_tags.q_id)
                     WHERE users.id = "'.$user_id.'"';