путаница о структуре результата от объединения таблиц, когда каждая строка имеет множественное соответствие на второй таблице

76
9

скажем, у меня есть простая заявка на опрос, и каждый пользователь может выбрать один вариант из опроса

моя таблица опросов

+-----------+---------------------+ 
| poll_id | question |
+-----------+---------------------+
| 1 | q1? |
+-----------+---------------------+
| 2 | q2? |
+-----------+---------------------+
| 3 | q3? |
+-----------+---------------------+

таблица параметров

+-----------+---------------------+---------+---------+ 
| option_id | poll_id | option | counter |
+-----------+---------------------+---------+---------+
| 1 | 1 | yes | 254 |
+-----------+---------------------+---------+---------+
| 2 | 1 | no |392333337|
+-----------+---------------------+---------+---------+
| 3 | 2 | yes | 1000 |
+-----------+---------------------+---------+---------+

прямо сейчас я делаю что-то подобное, чтобы показать все опросы я на одной странице

$polls = $db->query("select * from polls ");
foreach ($polls as $poll)
{

echo $poll->question;

$options = $db->query("select * from options where poll_id = '$poll->id' ");
foreach($options as $op )
{
echo '<checkbox />'.$op->option;
}

}

теперь, если я хочу сделать это, используя joine и один запрос

$query = "select p.* , o.* from polls p JOIN options  o ON p.poll_id = o.poll_id ";

какая структура данных будет использоваться для представления результата? возможно, многомерный массив? я не уверен, как я могу распечатать результат

как в этом примере результат будет

resul_array (
poll_id poll_question option option
1 q1 ys no
2 q2 no
}

если я получу результат в виде строки массива, у меня будут столбцы с похожим именем? Я смущен

спросил(а) 2021-01-19T18:35:19+03:00 2 месяца, 3 недели назад
1
Решение
105

На мой взгляд, вам просто нужно добавить "порядок" в свой запрос и сохранить результат в массиве, а затем обработать на нем логику.

Что-то вроде:

$polls = $db->query("select p.* , o.* from polls p JOIN options  o ON p.poll_id = o.poll_id order by p.poll_id");
$currentPoll = $polls[0];
foreach ($polls as $poll)
{
if($poll->poll_id != $currentPoll->poll_id) {
echo $poll->question;
$currentPoll = $poll;
}

echo '<checkbox />'.$poll->option;

}

НТН.

ответил(а) 2021-01-19T18:35:19+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема