2012-07-11 140 views
0

我有一個這樣的數據庫:MySQL查詢顯示數據

id  User_id Question_id  Answer 
1   john  Question_1  b 
2   john  Question_2  a 
3   john  Question_3  d 
4   harry  Question_1  a 
5   harry  Question_2  a 
6   harry  Question_3  c 
7   colleen Question_1  c 
8   colleen Question_2  a 
9   colleen Question_3  b 

我想顯示上述數據的內容如下格式 -

id  User_id  Question_1  Question_2  Question_3  
1  john    b    a     d 
2  harry   a    a     c 
4  colleen   c    a     b 

我怎樣才能做到這一點使用的sql?我正在使用mysql和php。

+0

@ nicholas--我想,不能讓在格式的數據我想要。 – 2012-07-11 09:55:12

回答

1
SELECT 
    id, 
    User_id, 
    MAX(IF(querstion_id = 'Question_1', answer, NULL)) AS Question_1, 
    MAX(IF(querstion_id = 'Question_2', answer, NULL)) AS Question_2, 
    MAX(IF(querstion_id = 'Question_3', answer, NULL)) AS Question_3 
FROM answers 
GROUP BY User_id 

編輯1
加入了PHP版本,見註釋

$table = array(); 
$query = "SELECT * FROM answers ORDER BY User_id, Question_id"; 

... fetch data depending on what interface you use ... 

foreach/while(....) 
{ 
    if(!isset($table[$result['User_id']])) 
    { 
     $table[$result['User_id']] = array(); 
     $table[$result['User_id']]['id'] = $result['id']; 
     $table[$result['User_id']]['User_id'] = $result['User_id']; 
    } 

    $table[$result['User_id']][$result['Question_id']] = $result['Answer']; 
} 

編輯2如何顯示它:

then jus時間顯示它,你將與一個正常的查詢完成, 這是怎麼了我usaly PHP數組轉換爲HTML:

echo '<table><thead>'; 
echo '<tr><th>' . implode('</th><th>', array_keys(current($table))) . '</th></tr>'; 
echo '</thead><tbody>'; 
foreach($table as $row) 
{ 
    echo '<tr><td>' . implode('</td><td>', $row) . '</td></tr>'; 
} 
echo '</tbody></table>'; 
+0

問題的數量可能是25-30,並且可能有100個用戶,上述查詢是否會有任何性能問題?謝謝你的回答...... – 2012-07-11 10:39:30

+1

樞軸還是會更好。對於這個查詢,你需要知道有多少個問題 – PoeHaH 2012-07-11 10:41:57

+0

@Neeraj我認爲php解決方案可能會更快,並且至少更具動態性,請參閱更新的答案 – 2012-07-11 10:59:37

0

嘗試......

SELECT tbl.user_id, 
     (SELECT answer 
      FROM your_table 
     WHERE user_id = tbl.user_id AND question_id = 'Question_1') q1, 
     (SELECT answer 
      FROM your_table 
     WHERE user_id = tbl.user_id AND question_id = 'Question_2') q2, 
     (SELECT answer 
      FROM your_table 
     WHERE user_id = tbl.user_id AND question_id = 'Question_3') q3 
    FROM (SELECT DISTINCT user_id 
        FROM your_table) tbl 
+0

此查詢用於oracle – jaychapani 2012-07-11 10:13:29

0

如果你確信只有3場,你可以使用這樣的事情。請記住,這個查詢是相當重的,所以你可能在PHP,而不是處理此更好的..

select a.user_id, 
a.question_id as Question_1, 
b.question_id as Question_2, 
c.question_id as Question_3 

from TABLE_NAME a, 
TABLE_NAME b, 
TABLE_NAME c 

where a.question_id="Question_1" and a.user in(select user_id from TABLE_NAME) 
and b.question_id="Question_2" and b.user_id =a.user_id 
and c.question_id="Question_3" and c.user_id =a.user_id 
0
select id,User_id, 
    sum(Answer*(1-abs(sign(Question_id-1)))) as Question_1, 
    sum(Answer*(1-abs(sign(Question_id-2)))) as Question_2, 
    sum(Answer*(1-abs(sign(Question_id-3)))) as Question_3, 
    sum(Answer*(1-abs(sign(Question_id-4)))) as Question_4 
    from results group by User_id