2010-12-15 6 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 위대하고 모든하지만 난 각 테이블과 테이블이 성장할 것 같이 필드가 필요합니다 같은

토마스

내 쿼리는 지금까지 보인다. :/

내 테이블 레이아웃 : 난 당신이 또한 의견의 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

있다. 그것은 당신의 뇌가 데이터베이스에서 N 대 N 관계의 아이디어로 편안하지 않을 수 있습니다. 그것은 당신이 옳은 것처럼 보인다고 생각하면 이상 할 것입니다 : p

+0

답장을 보내 주셔서 감사합니다. Matt. 문제는 각 주석 또는 태그에 프런트 엔드에서 사용할 수있는 여러 열/필드가 있다는 것입니다. 그래서 쉼표로 구분 된 문자열 쉼표는 필연적으로 수정 사항이 아닙니다. 폭발의 붐에 들어가기를 원하지 않는 한. –

관련 문제