2016-11-16 2 views

Antwort

0

können Sie beitreten verwenden

Ihren Benutzer Q1 Wert

JOIN `Question` `Q1` 
    ON `Q1`.`user_id` = `User`.`id` 
     AND `Q1`.`question name` = 'Q1' 

zu erhalten Ihren Benutzer Q2 Wert

JOIN `Question` `Q2` 
    ON `Q2`.`user_id` = `User`.`id` 
     AND `Q2`.`question name` = 'Q2' 

Abfrage Look wie diese

SELECT `User`.`id`, 
     `User`.`name`, 
     `Grade`.`grade`, 
     `Q1`.`mark` AS `Q1`, 
     `Q2`.`mark` AS `Q2` 
FROM `User` 
     JOIN `Grade` 
     ON `User`.`id` = `Grade`.`user_id` 
     JOIN `Question` `Q1` 
     ON `Q1`.`user_id` = `User`.`id` 
      AND `Q1`.`question name` = 'Q1' 
     JOIN `Question` `Q2` 
     ON `Q2`.`user_id` = `User`.`id` 
      AND `Q2`.`question name` = 'Q2' 

enter image description here

+0

Eigentlich kann es mehr als zwei Fragen geben und der Name der Frage kann sich ändern –

+0

@ebinmanuval, also möchten Sie den Namen der Frage als Spalte konvertieren? okay, warte nur – Beginner

0

Diese Abfrage wird Ihre Datenzeile in eine Spalte umwandeln, die Alias ​​als Question name Ihrer Frage Daten

SET @sql = NULL; 
SELECT 
    GROUP_CONCAT(DISTINCT 
    CONCAT(
     'MAX(IF(`Question name` = "', `Question name`, '",`mark`,NULL)) as ', `Question name`) 
) INTO @sql 
FROM Question; 

SET @sql = CONCAT('SELECT `User`.`id`, `User`.`name`, `Grade`.`grade`, ', @sql, ' 
        FROM `User` join `Grade` on `User`.`id` = `Grade`.`user_id` 
        join `Question` on `User`.`id` = `Question`.`user_id` GROUP BY `User`.`id`'); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 

User table Grade table Question table Result of the query

SQL Fiddle

Verwandte Themen