SQL - таблица соединений, где t1.value соответствует имени t2.column? - PullRequest
0 голосов
/ 30 октября 2019

У меня есть следующие 2 таблицы, содержащие настройки опроса и данные опроса.

enter image description here

Идея состоит в том, чтобы объединить две таблицы с помощью вопрос опроса , который определен в настройках как значение, с соответствующим столбцом вопрос опроса таблицы data , извлекающим оценку опроса этоговопрос.

Как можно объединить 2 таблицы на основе комбинации значение + столбец, а затем извлечь оценки для определенного опроса?

В настоящее время я получаю данные только из таблицы данных опроса, но мне не хватает столбца category в настройках, что затрудняет классификацию результатов на веб-сайте, поскольку я не хочу показывать все данные сразу. Мой PHP ниже для справки:

    $sql = "SELECT * FROM `survey_data` WHERE `Survey ID` = '".$id."'";
    $result = $db->query($sql);         // check if record exists based on ID number

    if($result->num_rows > 0) {         // if record is found, proceed accordingly

        if(!$result = $db->query($sql)) {
            die('There was an error getting survey details for record ' . $id . ' [' . $db->error . ']'); }

        $row = mysqli_fetch_assoc($result);
        foreach($row as $column => $value) {
            if ( $value != '' ) {
                echo "
                          <tr>
                            <td>$column</td>
                            <td>$value</td>
                          </tr>";
            }
        }

Спасибо за любую помощь, спасибо.

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

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

select t2.survey_id, t1.category, t1.question,
       (case when t1.question = 'Check-in Experience' then t2.`Check-in Experience`
             when t1.question = 'Check-out Experience' then t2.`Check-out Experience`
             when t1.question = 'Breakfast Experience' then `Breakfast Experience`
        end) as value
from table1 t1 cross join
     table2 t2
where t2.survey_id = ?
having value is not null;
0 голосов
/ 30 октября 2019

Использовать этот запрос:

SELECT * FROM survey_data sd inner join setting_table st on sd.Survey ID = st.setting ID WHERE `Survey ID` = '".$id."'

Он вернет все столбцы из обеих таблиц, но только соответствующие. категория соответствующей строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...