2012-03-15 2 views
0
+----+-------+---------+------+--------+--------+ 
|q_id|q_title|q_content|q_date|q_status|q_author| 
+----+-------+---------+------+--------+--------+ 
| 1 |varchar| text | int | int | int | 
+----+-------+---------+------+--------+--------+ 

이것은 첫 번째 테이블 : 질문입니다.
태그 표는이 구조가 있습니다한 번에 4 개의 테이블에서 데이터 선택

+------+--------+---------------+ 
|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를 가져 오려고합니다.

+0

를 예상대로 작동합니다이 코드를 시도? –

+0

태그 이름이있는 문자열을 반환하고 tag_id도 가져옵니다. –

답변

1

쿼리가 정확합니다. 태그 ID를 원하면 :

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

어떻게 출력을 보시겠습니까?

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.'"'; 
관련 문제