I'm building this form: http://pwmn.73dpi.com/questionnaire.php and have the questions and answers in a database, in two separate tables.
Here is the exact structure of the two db tables:
table[questions]
id
order
text
table[answers]
id
fk_question
order
text
points
The answers table relates to the questions one by an fk_question field.
This is my query:
SELECT
Q.id, Q.text, R.text, R.order AS rorder
FROM
`questions` Q
LEFT JOIN reponses R
ON Q.id = R.fk_question
The result of the above query is:
id qtext rtext rorder
1 Vous discutez avec un commerçant et malgré le fait... Vous passez à l'anglais. Si ça peut lui faire plai... 1
1 Vous discutez avec un commerçant et malgré le fait... Vous lui faites remarquer et lui demandez s'il peu... 2
1 Vous discutez avec un commerçant et malgré le fait... Vous continuez à lui parler en français, mais vous... 3
2 En faisant vos courses, vous remarquez que la boît... Vous achetez le produit sans en faire de cas. 1
2 En faisant vos courses, vous remarquez que la boît... Vous achetez le produit, mais vous prenez auparava... 2
2 En faisant vos courses, vous remarquez que la boît... Vous achetez le produit et vous contactez la compa... 3
3 Vous revenez d'un voyage à l'étranger et devez vou... Vous faites valoir votre droit de vous faire servi... 1
3 Vous revenez d'un voyage à l'étranger et devez vou... Vous prenez place devant le guichet d'à côté, mai... 2
3 Vous revenez d'un voyage à l'étranger et devez vou... Vous prenez place devant le guichet d'à côté, et v... 3
4 Dans la salle d'attente chez le médecin, vous comm... Vous arrachez discrètement la page du mot croisé p... 1
4 Dans la salle d'attente chez le médecin, vous comm... Vous laissez le mot croisé et replacez le magazine... 2
4 Dans la salle d'attente chez le médecin, vous comm... Vous prenez la peine d'effacer les réponses que vo... 3
5 Dans des toilettes publiques, vous remarquez qu'un... Vous sortez un stylo et vous corrigez l'erreur. 1
5 Dans des toilettes publiques, vous remarquez qu'un... Vous sortez un stylo et biffez l'erreur en ajoutan... 2
5 Dans des toilettes publiques, vous remarquez qu'un... Vous ne vous en préoccupez pas. 3
6 Vous êtes chargé de mener une réunion d'affaire av... Vous proposez que la réunion se déroule en françai... 1
6 Vous êtes chargé de mener une réunion d'affaire av... Vous proposez que la réunion se déroule en anglais... 2
6 Vous êtes chargé de mener une réunion d'affaire av... Vous proposez que la réunion se déroule en françai... 3
7 Lors d'une visite guidée de Calgary, le guide tour... Vous levez la main pendant la visite pour corriger... 1
7 Lors d'une visite guidée de Calgary, le guide tour... Vous ne dites rien tout de suite, mais vous ne man... 2
7 Lors d'une visite guidée de Calgary, le guide tour... Vous retournez à vos courriels sur votre téléphone... 3
8 Vous venez de vous acheter un ordinateur portable ... Vous gardez l'anglais comme langue principale. 1
8 Vous venez de vous acheter un ordinateur portable ... Vous gardez l'anglais pour l'instant, histoire de ... 2
8 Vous venez de vous acheter un ordinateur portable ... Vous réinstallez le disque immédiatement et choisi... 3
9 Vous discutez en anglais au téléphone avec un prép... Vous lui proposez de revenir à l'anglais. 1
9 Vous discutez en anglais au téléphone avec un prép... Vous prenez votre mal en patience, et lorsque vous... 2
9 Vous discutez en anglais au téléphone avec un prép... Vous continuez la conversation en français mais vo... 3
10 Alors que vous faites vos courses, un homme vous d... Vous atténuez quelque peu les propos du client, qu... 1
10 Alors que vous faites vos courses, un homme vous d... Vous demandez au client de se trouver un(e) autre ... 2
10 Alors que vous faites vos courses, un homme vous d... Vous traduisez ses propos tels quels, en soulignan... 3
Right now I'm using two separate database calls to accomplish the questions and the answers retrieval. I know this is not optimal and can be done with an SQL join somehow.
Here is the current SQL for the questions:
SELECT * FROM questions Q ORDER BY Q.order
and the answers:
SELECT * FROM reponses R WHERE R.fk_question = $questionId ORDER BY R.order
Using this SQL I can get all the answers returned, but then I lose the actual question...
SELECT
*
FROM
questions Q
LEFT JOIN reponses R
ON Q.id = R.fk_question
ORDER BY
Q.order
The ideal response would be one row by question, with a column containing an array listing the answers...
im opened to changing the db structure, or sql calls... ive been able to get the 1row per question and a column listing all the answers by using this sql:
SELECT Q.id,Q.text, GROUP_CONCAT(R.text), R.order AS rorder
FROM `questions` Q
LEFT JOIN reponses R ON Q.id = R.fk_question
GROUP BY Q.id
but not too sure if this format is best after all... id need to deal with the commas in text field and do the converting to an actual array in php...
for now having two separate calls seems clearer and works...
This is my first post on this site so let me know if anything is unclear and thanks a lot in advance!