J'ai une requete sql qui sélectionne une liste de musique classée par Artiste. Cependant cetaines musqiues n'ont pas d'artiste acr ce champ n'est pas obligatoire dans la base de données.
Le problème c'est qu'à l'affichage, je voudrais obtenir mes musiques dans l'ordre chiffre(0-9),a,b,c... et seulement à la fin les musiques sans artistes.
Comment faire pour ma requete en php pour que sql comprenne cela et me mette les musqiues sans artiste à la fin de ma liste tout en gardant l'ordre alphabétique pour les autres musiques.
perso je vois pas comment dire ça en sql, par contre, en php c faisable..
dans ta boucle d'extraction de données de ton tablo (le mysql_fetch_array), tu teste si y a un auteur, si oui tu l'affiche, sinon tu stocke les données dans un autre tableau...
a la sortie de ta boucle, tu rentre dans une deuxieme boucle qui s'occupe des musiques sans artistes...
ça me parait une solution simple en PHP.
par contre si tu trouves comment faire en sql, je suis preneur ;)
__________________________
....... Curtis: RTS 3D .......
Humm .. je ne suis pas sur, mais y'aurait un tour à faire du coté de join et union :
[quote] (SELECT * from musique WHERE artiste !='' ORDER BY name) UNION (SELECT * from musique WHERE artiste='' ORDER BY name)[/quote]
Je pense que c'est une solution bourrine également, comme celle d'Ishaan et que y'a surement plus simple, je vais essayer de chercher ailleur que dans ma mémoire :)
++
Mab
__________________________
[img]http://simous.chez.tiscali.fr/images/bansms.gif[/img]
ERREUR BBCODE SUR CE MESSAGE : - La valeur de la balise "quote" n'est pas correcte !
$query="(SELECT Code, Titre, Artiste, Logo, Source FROM tonalites WHERE Artiste !='' ORDER BY Artiste) UNION (SELECT Code, Titre, Artiste, Logo, Source FROM tonalites WHERE Artiste='' ORDER BY Artiste)";
J'ai fait ça mais ça marche pas Mab... Il ne classe pas la première partie de la requete.
Alors j'ai bidouillé cela :
(SELECT Code, Titre, Artiste, Logo, Source FROM tonalites WHERE Artiste !="" ORDER BY Artiste LIMIT 1000) UNION (SELECT Code, Titre, Artiste, Logo, Source FROM tonalites WHERE Artiste ="")
Et là ça fonctionne, cependant j'ajoutais avant :
$query.=" ASC limit 0,10";
dynamiquement pour un afficahe dix par dix.
Comment rajouter ce ASC limit à la fin de ma requete et qu'elle fonctionne toujours ??
Je continue à chercher, mais si vous avez d'autres idées...
__________________________
Gexti
dsl, je n'ai pas tout lu, mais j'ai regardé la requete posté par mab, et c'est une sous requete sur la meme table
en effet mysql<4.qqch ne gere pas les sous requetes.
essaye de voire avec une jointure ( comme l'a deja dit mab...)
( NATURAL JOIN me semble approprié dans ton cas )
__________________________
la FAQ javascript :
http://www.forum.moteurprog.com/?url=FAQ.php&langage=Javascript
mon site préféré sur le DHTML
http://www.dhteumeuleu.com/
moi j'ai eu le meme genre de problème et pour simplifier
mysql 4.0.22 (de free) ne supporte pas les sous-requêtes
elles ne sont supportées qu'à partir de la version 4.1.x
Moi ça me fait drôlement chier parce que je peux pas faire ma requête autrement.
Il me reste deux solutions, mettre ma base sur mon pc et en mysql5, ou alors bidouiller des strings dans tous les sens en PHP pour essayer de contourner le problème...
ou alors on spamm tous free pour qu'ils passent AU MOINS en mysql 4.1.x ^^
__________________________
....... Curtis: RTS 3D .......