2010-12-15 60 views
0

我有一个内容表,可以有不同的评论和标签结果长度与每行相关联。我不确定如何一次性获取所有这些内容的信息。加入具有不同长度的评论和标签的内容项目:D

我可以很容易地做一个查询来获取内容信息(id)和查询每个表的注释和标签,但是这似乎没有多少意义,如果有更好的方法。

任何提示或建议? 在此先感谢!

托马斯

我的查询到目前为止是这样的:

SELECT c.*, GROUP_CONCAT(tagWords.tagWord SEPARATOR ', ') AS tags FROM platform.contents c 
LEFT OUTER JOIN platform.contentTags ON contentTags.contentId = c.contentId 
LEFT OUTER JOIN platform.tagWords ON contentTags.tagId = tagWords.tagId 
WHERE c.contentType = 'album' LIMIT 10 

GROUP_CONCAT是伟大的,所有的,但我需要的字段从每个表和表将增长。 :/

我的表格布局:

mysql> explain contentComments; 
+--------------+---------------------+------+-----+-------------------+-------+ 
| Field  | Type    | Null | Key | Default   | Extra | 
+--------------+---------------------+------+-----+-------------------+-------+ 
| contentId | bigint(19) unsigned | NO | MUL | NULL    |  | 
| userId  | bigint(19) unsigned | NO |  | NULL    |  | 
| message  | varchar(255)  | YES |  | NULL    |  | 
| stampCreated | timestamp   | NO |  | CURRENT_TIMESTAMP |  | 
+--------------+---------------------+------+-----+-------------------+-------+ 
4 rows in set (0.00 sec) 

mysql> explain contentTags; 
+-----------+------------+------+-----+---------+-------+ 
| Field  | Type  | Null | Key | Default | Extra | 
+-----------+------------+------+-----+---------+-------+ 
| contentId | bigint(20) | NO | MUL | NULL |  | 
| tagId  | bigint(20) | YES |  | NULL |  | 
+-----------+------------+------+-----+---------+-------+ 
    2 rows in set (0.00 sec) 

mysql> explain contents; 
+------------------+-----------------------------------------+------+-----+-------------------+----------------+ 
| Field   | Type         | Null | Key | Default     | Extra   | 
+------------------+-----------------------------------------+------+-----+-------------------+----------------+ 
| contentId  | bigint(20)        | NO | PRI | NULL    | auto_increment | 
| contentType  | enum('video','album','blogpost','news') | NO |  | NULL    |    | 
| userId   | bigint(19) unsigned      | NO | MUL | NULL    |    | 
| contentTitle  | varchar(45)        | YES |  | NULL    |    | 
| contentDesc  | varchar(255)       | YES |  | NULL     |    | 
+------------------+-----------------------------------------+------+-----+-------------------+----------------+ 

mysql> explain tagWords; 
+---------+---------------------+------+-----+---------+----------------+ 
| Field | Type    | Null | Key | Default | Extra   | 
+---------+---------------------+------+-----+---------+----------------+ 
| tagId | bigint(19) unsigned | NO | PRI | NULL | auto_increment | 
| tagWord | varchar(45)   | YES |  | NULL |    | 
+---------+---------------------+------+-----+---------+----------------+ 
2 rows in set (0.00 sec) 

回答

0

看起来我的权利,但我认为你还需要征求意见一GROUP_CONCAT。这可能是因为你的大脑对于数据库中的N到N关系的想法并不舒服,考虑到它看起来像我这样做是正确的,这将是奇怪的:p

+0

感谢您的回复。 我的问题是,每个评论或标签都有多个需要在前端提供的列/字段。所以,一个字符串逗号分隔不一定是一个修复..除非我想进入爆炸的buch。 – 2010-12-15 16:48:12