Создать отчет из нескольких таблиц в php, MySql

0

У нас есть четыре таблицы, которые включают в себя следующие данные,

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 на основе этих данных, как показано ниже,

survey_result_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  |[email protected] | India        | His Answer | Another Ans...

Итак, как мы можем генерировать этот отчет с помощью mysql, php?

  • 0
    Вы написали какой-либо запрос для достижения этого?
  • 0
    @LovepreetSingh Я пытался сослаться на stackoverflow.com/questions/32298656/… но не смог.
Теги:

1 ответ

1
Лучший ответ

Я бы подошел к нему, сформировав такой базовый запрос, чтобы получить идентификатор пользователя:

select u.user_id from tbl_user u

то, предположив, что мы получаем данные идентификатора $users переменной $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'

Наконец, проанализируйте запрос в массиве пользовательских вопросов.

Экспорт в excel вопрос уже был дан Бабой в qaru.site/questions/1906735/... и я поделюсь его ответом здесь:

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
  • 0
    Спасибо за проект.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню