php - 从 php、MySql 中的多个表创建报告
问题描述
我们有四个表格,分别包含以下数据,
1. tbl_user [user_id, user_name, user_email, user_country]
2. tbl_questions [survey_id, survey_question, posted_on]
3. tbl_answers [answer_id, question_id, answers]
4. tbl_survey_result [user_id, question_id, answer_id, timestamp]
我们想根据这些数据生成一个excel报告,如下图,
调查结果_dd_mm_yyyy.xls
sr_no | User_id | User_name | User_Email | User_Country | Question_1 | Question_2... ( n number of questions)
1 | 123456 | John Doe |john@doe.in | India | His Answer | Another Ans...
那么,我们如何使用 mysql、php 生成这个报告呢?
解决方案
我会通过形成这样的基本查询来获取用户ID来接近它:
select u.user_id from tbl_user u
然后,假设我们在变量中获取用户 ID 数据,我将在循环$users
中运行以下查询:foreach ($users as $user)
select u.user_id, u.user_name, u.user_email, u.user_country, q.survey_question, a.answers from tbl_user u
inner join tbl_survey s on u.user_id = s.user_id
inner join tbl_answers a on a.answer_id = s.answer_id
inner join tbl_questions q on q.question_id = s.question_id
where u.user_id = %user
order by u.user_id, q.survey_id'
最后,将查询解析为用户问题数组。
Baba 在https://stackoverflow.com/a/10424955/3986395中已经回答了导出到 excel 的问题,我将在这里分享他的答案:
header("Content-Disposition: attachment; filename=\"demo.xls\"");
header("Content-Type: application/vnd.ms-excel;");
header("Pragma: no-cache");
header("Expires: 0");
$out = fopen("php://output", 'w');
foreach ($array as $data)
{
fputcsv($out, $data,"\t");
}
fclose($out);
最后,如果您有数百万用户,您可能不想在 foreach 循环中运行查询,而是编写一个组合查询来获取所有用户数据。此查询将为您提供 user_id-answer 记录,您需要 php 中的其他处理逻辑将数据合并到所需的数组中
select u.user_id, u.user_name, u.user_email, u.user_country, q.survey_question, a.answers from tbl_user u
inner join tbl_survey s on u.user_id = s.user_id
inner join tbl_answers a on a.answer_id = s.answer_id
inner join tbl_questions q on q.question_id = s.question_id
where ..
order by u.user_id, q.survey_id
推荐阅读
- tibco - TIBCO EMS 在等待确认时哪个超时?
- google-cloud-platform - 通过使用适用于 Google Compute Engine API 的 Node.js 客户端库附加现有磁盘来创建新 VM
- configuration - 如何在独立模式下在集群中配置 jbossfuse 7.0
- bash - 带有 base64 的 Google Speech bash 脚本:意外的令牌。\n
- swift - 通过枚举显示多个 UICollectionViewCells?
- idl-programming-language - 使用 idl 的曲线下面积
- r - 将预测值添加到原始 df
- python - 如何更改 kivy Graph 的背景颜色?
- javascript - 从输入中检索数据 - laravel
- xslt - 按类型分组的 xslt 字段