2012-07-11 143 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