2016-09-30 7 views
0

사용자로부터 피드백 (열 피드)을 저장하는 MySQL 데이터베이스 테이블이 있습니다. 게시 된 질문에 대해 (유형 = que, ref = 0) 질문에 응답하고 (유형 = ans) 응답 할 수 있습니다. 나는 HTML에서이 테이블을 보여주기 위해 노력하고, 지금MySQL 테이블의 HTML 행과 유사한 그룹으로 그룹화

id  username  feed   type  ref 
1  mr_x  question_1  que  0 
2  mrs_y question_2  que  0 
3  mr_z  answer_to_2  ans  2 
4  mr_z  answer_to_1  ans  1 
5  mr_x  answer_to_2  ans  2 

: '심판'열은 참조 질문의 'ID'을 보여줍니다. 나는 같은 '심판'으로 모든 답을한데 모으고 그들이 말하는 질문 아래에 보여주고 싶다. 예를 들어 ORDER를 사용

PHP를 쿼리 :

"SELECT * FROM feedback ORDER BY ref ASC"; 

여기에 작동하지 않습니다. HTML에서

내 원하는 출력은 다음과 같습니다 아마 같은 '심판'모든 답을 계산하고, ROWSPAN을 구축 할 필요가

mr_x  question_1  que  0 
mr_z  answer_to_1  ans  1 
mrs_y question_2  que  0 
mr_z  answer_to_2  ans  2 
mr_x  answer_to_2  ans  2 

. 누구도 비슷한 도전을 경험 한 적이 있습니까?

+0

그럼 ... 꽤 스레드 포럼처럼? – CD001

+0

예. 그러나 나는 그것을 최소한으로 만들었습니다 ... 당신이 볼 수있는 것처럼. – Alex

답변

2

다음 쿼리는 에 의해 주문 된 feedback 테이블에서 레코드를 반환하며 부모 스레드의 레코드는 자식 레코드 앞에 표시됩니다.

SELECT f.* 
FROM feedback f 
ORDER BY CASE WHEN f.ref = 0 THEN f.id ELSE f.ref END, 
     f.id 

설명 :

ORDER BY는 주문에 대한 두 가지 기준을 사용합니다. 먼저 ref이 0 (부모 스레드를 나타냄) 일 때 id을 주문하고, 0이 아니면 ref (자식 스레드를 나타냄)을 주문합니다. 그런 다음 자식 전에 부모 스레드를 배치하려면 다음 순서로 id을 주문합니다. 부모 스레드는 항상 자식보다 작은 id을 가지므로이 방법이 효과적입니다.

+0

@Alex이 쿼리는 기본적으로 작동해야합니다. 다른 필요 사항이 있으면 알려주십시오. –

+0

팀, 훌륭한 솔루션. 주문서에 THEN AND ELSE를 사용할 수 있는지 몰랐습니다. – Alex

+0

LOL ... 나도 그랬어 .-P –

관련 문제