Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1601 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] Bdd avec LEFT JOIN, tri sur deux champs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] Bdd avec LEFT JOIN, tri sur deux champs

n°1867781
leica69
Posté le 31-03-2009 à 09:58:35  profilanswer
 

Bonjour,
j'ai un souci avec une de mes BDD. Je n'ai pas trouvé de solution dans le forum, voicu la situation.
 
Il s'agit d'une BDD liée à une galerie d'artistes. J'ai 4 tables liées entre elles:
1/ artistes
  id
  nom
  prenom
  pseudo
  mail
  ...
 
2/ oeuvres
  id
  artiste (valeur de artistes.id)
  titre
  format
 
3/ styles
  id
  nom
  (exemple 1:peinture; 2: photo; 3:textile,...)  
 
3/ categories (table de liaison oeuvres - styles)
  oeuvre
  style
  (une oeuvre pouvant appartenir à divers styles comme peinture+photo)
 
J'ai:
la liste des styles différents avec les noms des artistes ayant au moins une oeuvre dans ce style:
Céramique
  Dupont, Jean
 
Peinture
 Dupont, Jean
 Chappuis, Martin
 
Photographie
 Dubois, Claude
 Niepce, Nicéphore

 

Citation :

Code:
//création d'une requête SQL pour obtenir la liste des catégories
$requete="SELECT * FROM categories ORDER BY nom";
$resultat=mysql_query($requete) or die ("Problème lors de la requête. Erreur: ".mysql_error());
while($ligne=mysql_fetch_array($resultat)){
 echo "\n<p>$ligne[nom]</p>";
 
 //création d'une requête SQL pour obtenir la liste des artistes
 $requete2 = "SELECT DISTINCT a.id,a.nom,a.prenom FROM ((oeuvres o LEFT JOIN l_oeuvre_cat l ON o.id=l.loc_oe) LEFT JOIN artistes a ON o.artiste=a.id) WHERE l.loc_cat=$ligne[id]";
 $resultat2=mysql_query($requete2) or die ("Problème lors de la requête. Erreur: ".mysql_error());
 while($ligne2=mysql_fetch_array($resultat2)){
  echo "\n<p><a href='artistes.php?id=$ligne2[id]'>$ligne2[nom], $ligne2[prenom]</a></p>";
 }
}


 
Mon problème:
je souhaite que pour les noms des artistes, si un pseudo est défini, le pseudo s'affiche et PAS le nom. Ca c'est facile. Le souci c'est de trier les artistes par ordre alphabétique nom OU pseudo. J'imagine passer par une requête UNION mais je ne vois pas comment l'intégrer.
Qqn peut-il m'aider?
 
D'avance merci.

mood
Publicité
Posté le 31-03-2009 à 09:58:35  profilanswer
 

n°1867792
vttman2
Je suis Open ...
Posté le 31-03-2009 à 10:25:28  profilanswer
 

Si tu arrives à sélectionner au niveau de ta requête le nom ou pseudo
avec une fonction SQL syle decode, case, iif, if ...
alors niveau tri ça devient assez simple  
=>
Order by < place de (nom/pseudo) dans select>  
 
ex:  
select chp1,chp2,decode(MonAiguillage =  1, Nom, pseudo)
from matable
order by 3  
 
ou
 
select chp1,chp2,chp3,chp4,decode(MonAiguillage =  1, Nom, pseudo)
from matable
order by 5
 
 
 
 


---------------
il n'y a pas que le VTT dans la vie, il y a le Snowboard aussi ...
n°1867798
skeye
Posté le 31-03-2009 à 10:39:30  profilanswer
 

(et c'est encore plus lisisble avec un alias sur le champ decodé :D )


Message édité par skeye le 31-03-2009 à 10:39:34

---------------
Can't buy what I want because it's free -
n°1867838
leica69
Posté le 31-03-2009 à 12:14:09  profilanswer
 

J'ai des erreurs de syntaxe en faisant un test:
$requete2 = "SELECT pseudo,DECODE(pseudo,'Nirav','ok','KO') FROM artistes";
 
Ca devrait fonctionner avec MySQL!!!

n°1867840
leica69
Posté le 31-03-2009 à 12:28:51  profilanswer
 

OK, j'ai réussi on utilisant une cndition IF:
$requete2 = "SELECT DISTINCT a.id,IF(a.pseudo<>'',a.pseudo,CONCAT(a.nom,', ',a.prenom)) mon_nom FROM ((oeuvres o LEFT JOIN l_oeuvre_cat l ON o.id=l.loc_oe) LEFT JOIN artistes a ON o.artiste=a.id) WHERE l.loc_cat=$ligne[id] ORDER BY mon_nom";

n°1867846
skeye
Posté le 31-03-2009 à 12:52:43  profilanswer
 

leica69 a écrit :


Ca devrait fonctionner avec MySQL!!!


Non, decode, c'est oracle only.


---------------
Can't buy what I want because it's free -
n°1867848
leica69
Posté le 31-03-2009 à 12:54:38  profilanswer
 

C'est ce que j'ai cru comprendre en survolant les forums. C'est pour ça que j'ai opté pour IF.
 
Merci pour votre aide


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] Bdd avec LEFT JOIN, tri sur deux champs

 

Sujets relatifs
[SQL Server 2005] Execute, droit refuséeSQL SERVER: Retourner la 2ème ligne...
[SQL]Problème pour lancer phpmyadmin sous linux KDE[SQL] Comportement jointure sur clé de type varchar
recherche multi champs ( x champs) + nom entête de champNotification Mail dans Plan de Maintenance SQL 2005
Problème lors de l'ajout d'une BDD Sql server sous Visual StudioBdD MySQL en local
Requête union SQL sous Access 
Plus de sujets relatifs à : [SQL] Bdd avec LEFT JOIN, tri sur deux champs


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR