|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre émérite
![]() |
Bonjour, j'ai un petit de souci de requête comme vous pouviez vous en douter.
Voilà le schéma simplifié de mes tables. Table user : nom,prenom,iduser Table groupe : idgroupe, nom Table messages : idmess, iduser, idgroupe, texte Sachant qu'un message peut être adressé SOIT à un user (iduser != -1 et idgroupe = -1) SOIT à un groupe (idgroupe != -1 et iduser = -1) je cherche à récupérer suivant les cas -> Le nom du groupe (si c'est destiné au groupe) ou bien -> Les noms et prénoms de l'utilisateur (si c'est destiné à l'utilisateur) J'ai tenté avec un case mais sans succès.... Un coup de main serait le bienvenue, en vous remerciant par avance.
__________________
Le . est la base de toute bonne concaténation, marre de voir des echo "Mavar1 = $toto et Mavar2 = $titi"; ou pire echo 'Mavar1 = ',$toto,' et Mavar2 = ',$titi; pratiquez plutôt le echo 'Mavar1 = '.$toto.' et Mavar2 = '.$titi; |
|
|
00
|
|
|
#2 | ||
|
Membre éclairé
![]() Étudiant Inscription : juillet 2006 Messages : 242 ![]() |
Salut !
Je te propose une solution qui fonctionne, mais elle n'est pas très optimisée (du moins je pense). Je suis également ouvert à toute optimisation, je ne connais pas trop les CASE en SQL encore. Code :
__________________
La vitesse de la lumière étant supérieure à la vitesse du son, certaines personnes brillent encore tant qu'elles n'ont pas parlé ----------------------------------------------------------- Retrouvez mes articles informatique sur mon Site Developpez. Le reste, sur le Site perso ! |
||
|
|
00
|
|
|
#3 | ||||||
|
Membre habitué
![]() Inscription : octobre 2003 Messages : 102 ![]() |
Re-salut :-)
un UNION me semble tout indiqué. Code :
Si tu peux créer à la volée pour chaque ligne l'info type de destinataire en créant également le pseudoi champ 'type_detin' remarque que structurellement parlant, les différentes requetes qui composent le UNION doivent rester "superposables" (même champs et dans le même ordre): Code :
Tu peux faire comme si cette requete audessus était une table que tu peux manipuler (classer par nom par exemple) en fait : Code :
Table user : nom,prenom,iduser Table groupe : idgroupe, nom Table messages : idmess, iduser, idgroupe, texte
__________________
il n'y a pas de sotte existence |
||||||
|
|
00
|
|
|
#4 | ||
|
Membre émérite
![]() |
Alors une petite précision pour rajouter un peu de piment (sinon c'est définitivement pas marrant hein
Je ne peux pas mettre mes champs à NULL étant donné que c'est une base utilisée par un soft et que celui qui en a fait la conception devait pas être bien réveillé ce jour là. Donc en résumé TOUS les champs doivent être remplis alors pour gruger ils calent des espaces dans les champs qui ne contienent rien. Ensuite pour la version SQL>4.1 aucune idée étant donné que je suis sous Oracle8i Je vais tester avec la version de Gisele mais il faut que j'arrive à tout piger ![]() EDIT : j'ai testé et ... ça ne fonctionne pas Voilà ma requête (inspirée de la 1ère de gisele) avec les vrais noms de champs (attention ça fait mal aux yeux) Code :
Merci de m'éclairer de vos lumières et de prendre le temps de me répondre
__________________
Le . est la base de toute bonne concaténation, marre de voir des echo "Mavar1 = $toto et Mavar2 = $titi"; ou pire echo 'Mavar1 = ',$toto,' et Mavar2 = ',$titi; pratiquez plutôt le echo 'Mavar1 = '.$toto.' et Mavar2 = '.$titi; |
||
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Inscription : octobre 2003 Messages : 102 ![]() |
bah si si t'as la main sur ta base genre avec phpmyadmin, clique sur SQL et patate une des requetes, elles sont pretes pour l'emploi.
Pour etre plus clair, UNION sert à cumuler les resultats de 2 ou plusieurs requetes a conditions qu'elles aient la même gueule. (memes noms/structures de champs dans la clause SELECT) par exemple, je cumule dans le même jeu d'enregistrement un select sur les messages des user + un select sur lesmessages des groupes mon premier ex , le plus simple renvoie tous les message pour user suivi de tous le smessages pour groupe, en comblant le champ 'prenom' avec "/" pour le cas groupe. Mon 2 eme exemple ajoute un champs qui stipule quel type dedestinataire en terme de retour ca afficherait quelque chose comme çà: type_dest | nom | prenom | message Utilisateur | DUPOND | paul | son_messageblablasdfsd Utilisateur | Janvion | Gerard| son_messageblabla_a_gerard Utilisateur |Zimako | Jacques | son_messageblablahdskjfhsd Groupe |groupe1| / | son_messageblabla_au_groupe1 Groupe |groupe2 |/ |son_messageblablahdskjfhsd_groupe2 Mon 2 eme exemple englobe ces resultat dans une pseudo table formée par une sousrequete (la meme que l'exemple 2) de maniere a pouvoir manipuler la table (ORDER BY, GROUP BY etc.), chose impossible avec dans chacune des requetes UNION. je classe par nom les resultat au dessus (order by nom) et ca donne : type_dest | nom | prenom | message Utilisateur | DUPOND | paul | son_messageblablasdfsd Groupe |groupe1| / | son_messageblabla_au_groupe1 Groupe |groupe2 |/ |son_messageblablahdskjfhsd_groupe2 Utilisateur | Janvion | Gerard| son_messageblabla_a_gerard remarque : d'apres ce que tu me dit dans ton dernier post, tu peux rempacer '/' par NULL (sans les quotes) pour obtenir des champs vides. Utilisateur |Zimako | Jacques | son_messageblablahdskjfhsd
__________________
il n'y a pas de sotte existence |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com