|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : mars 2007 Messages : 16 ![]() |
Bonjour,
Je ne fais pas beaucoup de sql et je dois écrire une requête un peu complexe (pour moi en tout cas Je vais prendre un exemple : Une table "personne" avec un champ id et un champ nom. Une table "hotel" avec un champ id, un champ nom. Une table "personne_a_dormi" avec un id, une clef étrangère idPersonne et une clef étrangère idHotel et un champ a_dormi. Ce que je voudrais, comme résultat de requête, c'est quelque chose comme ça : | personne | |hotel1| |hotel2| |hotel3| |hotel4| ..... personne1 oui non oui ..... personne2 non .... ... Je ne sais pas si je suis clair ? En gros, je voudrais, pour toutes les personnes, voir tous les hotels. Zhebulonn |
|
|
00
|
|
|
#2 | ||
![]() ![]() |
Si possible, faites la mise en page dans votre application cliente, car le SQL est un langage déclaratif où le nombre de colonnes doit être connu avant d'écrire la requête.
Sinon il s'agit simplement de deux jointures : Code :
__________________
Email : http://scr.im/waldar |
||
|
00
|
|
|
#3 | ||
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 843 ![]() |
Il a raison, on ne peut faire un select sur un nombre indéterminé de colonnes, la seule solution est une procédure stockée. En mysql ça donnerait ça:
Code sql :
Le résultat est ce que tu voulais, du moins au mieux de ce que l'on peut pondre avec les contraintes de sql ![]() Un résultat d'une ligne qui est l'entête, suivie d'un résultat d'une ligne par personne, les valeurs sont séparées par une virgule. Tu dois donc pouvoir manipuler une requête à résultats multiples (mysqli ou pdo pour mysql principalement avec un petit réglage)... A toi d'adapter ceci à ton sgbd si c'est pas mysql car chacun fait sa vie vis à vis de l'écriture sql et tu trouveras un autre pour t'aider à le faire ![]() Si tu veux que l'intégrité référentielle soit respectée sur la table de liaison il faut utiliser le moteur innodb à la place de myisam sur cette table. voilà |
||
|
|
00
|
|
|
#4 |
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
bonjour
PIVOT fait ce genre de choses (sous MS SQL). Penses a jeter un coup d'oeuil sur le forum avec ce mot ![]() a+ olivier |
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : mars 2007 Messages : 16 ![]() |
Merci beaucoup pour vos réponses.
Je n'ai pas encore eu le temps d'essayer. Je vous tiens au courant. |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 843 ![]() |
à savoir que avec peu de modifications tu peux les différents résultats en un seul au format xml en rajoutant quelques concat, après tout dépend de tes besoins
|
|
|
00
|
|
|
#7 | ||
|
Membre Expert
![]() |
Citation:
Cela vous évitera le code de ericd69 qui est tout sauf une solution... Citation:
La 'solution' côté SQL serait un pivot mais je crois que (lui aussi) n'est pas implémenté dans mySQL.
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
||
|
|
00
|
|
|
#8 | |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
Citation:
c'est implémenté : http://dev.mysql.com/doc/refman/5.0/...n_group-concat |
|
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 843 ![]() |
la réduction des échanges sgbd/application peut être aussi un critère...
y a jamais une seule solution pour faire les chose et une seule optimisation... ça dépend de tes besoins toutes les solutions proposées ici se valent mais certaines peuvent être plus adaptées selon tes contraintes (principalement les caractéristiques de fonctionnement de ton mysql)... ![]() ps: j'adore l'intégrisme de certains!
|
|
|
00
|
|
|
#10 | |
|
Membre Expert
![]() |
Citation:
Je passe mon temps à reprendre ce genre de code une fois les applications tombées en prod... Et je peut vous dire que je suis 'doux' certains machent moins leurs mots...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 843 ![]() |
y a pas de soucis moi aussi ça m'arrive mais il faut se dire qu'il n'y a pas qu'un chemin pour aller au but
et parfois, quand tu vois comment sont codés des trucs genre phpbb, dotclear ou autres... ça fait peur ![]() après faut pas être trop formaliste non plus... je l'ai pas pris mal... Perso, utiliser une subtilité de programmation pour limiter l'usage de bp et donner un résultat qui est récupéré avec un simple split pour etre transformer en tableau en php je trouve ça plus pas si mal... le langage est un outil pas forcément une fin en soit et la répartition sgbd/appli pour le traitement peut toujours se discuter... Le traitement que tu proposes est tout aussi valable.
|
|
|
00
|
|
|
#12 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Citation:
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
|
00
|
|
|
#13 | |
|
Membre Expert
![]() |
Citation:
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com