8721 sujets

Développement web côté serveur, CMS

Bonjour à tous,

J'ai une requête à faire qui sort de mon domaine de compétence...

SELECT t1.question, t1.reponse, t2.prenomprof, t2.nomprof, t3.oeuvre, t4.prenomcompo, t4.nomcompo FROM t1, t2, t3, t4 WHERE t1.coursID=t3.id AND t3.profID=t2.id AND t3.compoID=t4.id AND t1.sol=0


Jusqu'ici pas de problème.
Mais en fait je souhaite aussi afficher des résultats avec le champs d'une autre table (t5.titre) lorsque t1.sol=1 :
SELECT t1.question, t1.reponse, t5.titre FROM t1 WHERE t5.sol=1


Comment faire une seule requête de tout ça pour pouvoir classer les résultats obtenus des 2 ?
En gros: si sol=0 select 1
et si sol=1 select 2

Merci de votre aide.
Modifié par whynote (29 Sep 2013 - 20:30)
Le 2ème select c'est précisément:

SELECT t1.question, t1.reponse, t5.titre FROM t1, t5 WHERE t5.sol=1 AND t5.coursID=t1.id
Je pense à un UNION, mais les deux requêtes n'ayant pas les mêmes champs dans le SELECT, ça ne va pas. A vrai dire, je me demande pourquoi tu tiens absolument à écrire ces deux requêtes en une seule.
Je souhaite classer les résultats obtenus et je ne vois pas comment faire s'ils viennent de deux requêtes différentes... Mais peut-être as-tu une idée ?
Par exemple :

SELECT t1.question, t1.reponse, t2.prenomprof, t2.nomprof, t3.oeuvre, t4.prenomcompo, t4.nomcompo, ''
FROM t1, t2, t3, t4
WHERE t1.coursID=t3.id AND t3.profID=t2.id AND t3.compoID=t4.id AND t1.sol=0
UNION
SELECT t1.question, t1.reponse, '', '', '', '', '', t5.titre
FROM t1, t5
WHERE t5.sol=1 AND t5.coursID=t1.id


J'insère des '' à la place des champs qui ne sont pas en commun entre les deux requêtes. Je suis loin d'être sûr que ça te convienne. Tu veux trier selon quel(s) champ(s) ?
Merci de ton aide.
Je n'arrive malheureusement pas à la faire fonctionner...
J'obtiens: #1222 - The used SELECT statements have a different number of columns

En relisant ma requête, j'ai réalisé qu'il y avait une erreur le champs "sol" est dans t1, or dans le 2ème select on a t5.sol=1
Mais ce n'est pas la cause du problème évidemment. J'ai modifié et ça ne change rien.
Imaginons que je sépare les deux requêtes.
Comment faire pour regrouper ensuite les résultats et les trier par date (avec un champ date bien sûr dans chaque requête) ?
Tiens donc, c'est étrange, car dans mon phpmyadmin, la requête UNION fonctionne. Je l'ai d'ailleurs légèrement améliorée :
SELECT t1.question, t1.reponse, t2.prenomprof, t2.nomprof, t3.oeuvre, t4.prenomcompo, t4.nomcompo, '' as titre
FROM t1, t2, t3, t4
WHERE t1.coursID=t3.id AND t3.profID=t2.id AND t3.compoID=t4.id AND t1.sol=0
UNION
SELECT t1.question, t1.reponse, '', '', '', '', '', t5.titre
FROM t1, t5
WHERE t1.sol=1 AND t5.coursID=t1.id


Voici une copie d'écran de mon phpmyadmin :

upload/51384-alsa.png
Merci pour ton message.
Ca marche aussi chez moi à présent. Je n'avais pas le même nom de champs dans les 2 select...
Il ne me reste plus qu'à l'intégrer dans ma page. J'essaie immédiatement....