2013-03-12 3 views
0

J'ai trois tables dans MySQL: application, questions, et questions_answer.Comment récupérer des données à partir d'une table MySQL polymorphe

application stocke user_id; questions stocke question_id et le type of questions (nom, NRIC, nom de l'école); questions_answer stocke le answers en faisant référence à user_id et question_id. D'après ce que je comprends, ce type d'association est appelé association polymorphe. Maintenant, je suis à perdu de la façon de récupérer des données de différents question_id et les rendre comme en-tête de colonne à la place.

J'espère que cela a du sens.

Edit:

Pour illustrer, voici la table respective:

application:

user_id   name 
------------------------------- 
100    Leon Barnacles 
101    Richard Kennard 
102    Fareeza Salleh 

questions:

question_id  question_name 
--------------------------------------------- 
20    NRIC 
21    Have you ever applied to TFM? 
22    What's your current GPA? 
23    Name of school 

questions_answer:

question_id  user_id  answer 
------------------------------------------------ 
20    100   880808-06-8990 
20    100   900990-14-0911 
23    102   SMK Taman Pandamaran 

Ce que je souhaite récupérer:

Name    NRIC    Name of school 
------------------------------------------------------------ 
Leon Barnacles  880808-06-8990  
Richard Kennard  900990-14-0911 
Fareeza Salleh       SMK Taman Pandamaran 

Répondre

0

Qu'est-ce que vous avez besoin est une fonction de type PIVOT, MYSQL ne supporte pas PIVOT comme SQL Server ou Oracle. Vous pouvez utiliser le script suivant pour obtenir l'aide pivotmax and case sur des questions données tableau

select group_concat(concat('max(case when question_id = ''', question_id, ''' then 
      answer end) as `', question_name ,'`')) into @sql from tfm_questions; 

set @sql = 
concat('select full_name, ', @sql, ' from 
      (
      select a.full_name, q.question_name, an.answer, q.question_id 
      from tfm_application a 
      inner join tfm_questions_answer an on a.user_id = an.user_id 
      inner join tfm_questions q on an.question_id = q.question_id 
     ) x 
     group by full_name'); 


select @sql; 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

SQL DEMO

+0

Je continue à obtenir l'erreur de syntaxe sur 'declare'. A-t-il besoin d'une syntaxe supplémentaire pour pouvoir travailler? – Khairul

+0

remove declare et try –

+0

Toujours le même message: 'Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à la version de votre serveur MySQL ... ' – Khairul

Questions connexes