Php 使用foreach循环更改查询或数据
我试图通过考试id来获取我的数据。。。这些号码是我的学生号码。数据存储在我的数据库中,如下所示 这是我的php代码Php 使用foreach循环更改查询或数据,php,sql,yii,Php,Sql,Yii,我试图通过考试id来获取我的数据。。。这些号码是我的学生号码。数据存储在我的数据库中,如下所示 这是我的php代码 $sql = "SELECT number, question_id, answer FROM `questions_answers` WHERE exam_id=" . $id; $command = Yii::app()->db->createCommand($sql); $data = $command ->query(); This is my fo
$sql = "SELECT number, question_id, answer FROM `questions_answers` WHERE exam_id=" . $id;
$command = Yii::app()->db->createCommand($sql);
$data = $command ->query();
This is my for each loop, i am writing to csv file.
foreach($data as $result) {
fwrite($fp, $result['number'] . "," . $result['answer'] . "\r\n");
}
这给了我这样的结果
我希望我的结果是这样的。。式中,2是由数字3100000123给出的Q1的答案,3是Q2的答案,1是Q3的答案。下一个学生编号也是如此。。我尝试过不同的事情,但没有一件对我有效。我怎样才能获得这样的数据
您可以使用
GROUP\u CONCAT
$sql = "SELECT number, GROUP_CONCAT(question_id) question_id, GROUP_CONCAT(answer) answer FROM `questions_answers` WHERE exam_id=" . $id ." GROUP BY number";
试着这样做:
$newArr = array();
foreach($data as $result) {
$newArr[$result['number']][] = $result['answer'];
}
foreach($newArr as $number=>$answer) {
$answer_sring = implode(",",$answer);
fwrite($fp, $number . ", ".$answer_sring. "\r\n");
}
您可以使用
PIVOT
。假设您的源表名为tab
。然后通过以下方式使用轴
:
SELECT *
FROM
(SELECT question_id,
answer,
number
FROM tab
) src
PIVOT
(
MAX(answer)
FOR question_id IN ([1], [2], [3])
) piv
您可以将其分配给$sql
变量:
$sql = '
SELECT *
FROM
(SELECT question_id,
answer,
number
FROM tab
) src
PIVOT
(
MAX(answer)
FOR question_id IN ([1], [2], [3])
) piv'
您可以在此处看到此功能->
希望这有帮助 试试这个
SELECT number, SUM( IF( question_id =1, answer, NULL ) ) AS Q1,
SUM( IF( question_id =2, answer, NULL ) ) AS Q2,
SUM( IF( question_id =3, answer, NULL ) ) AS Q3,
FROM test
GROUP BY number;
您正在寻找透视表。这里有很多答案。您可以通过单个查询获得结果我将如何使用透视表进行查询?根据我以上的要求,任何示例都可以使用sql搜索此so站点的数据透视表。你会发现大量的例子