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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MYSQL]requete selective distingante

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MYSQL]requete selective distingante

n°907237
sanglochon
Posté le 24-11-2004 à 23:46:28  profilanswer
 

Bonjour à tous,
 
je me casse la tête depuis quelques heures sur une requêtes MYSQL que je n'arrive pas à régler.
 
Voila le probleme :
-g une base qui contient en autre une colonne NOM
-je souhaite faire une requete mysql pour qu'il me renvoie la liste des lettres correpondant au premier caractère du texte contenu dans la colonne NOM et en un seul exemplaire
 
Si je prend un exemple :
- une base contient dans la colonne nom ces différentes lignes : barbier, benoit, dupont, dumont, effeil
 
Ma requete doit me renvoyer : b,d,e (et pas b,b,d,d,e)
 
Pouvez vous m'éclairer ?
 
D'avance merci.

mood
Publicité
Posté le 24-11-2004 à 23:46:28  profilanswer
 

n°907284
sanglochon
Posté le 25-11-2004 à 00:07:58  profilanswer
 

J'ai trouvé :
 
$resultat = mysql_query("SELECT LEFT(`nom`,1) AS 'lettre' FROM `user` GROUP BY 'lettre' ORDER BY 'lettre'",$connexion) or die (mysql_error());

n°907315
Beegee
Posté le 25-11-2004 à 00:22:55  profilanswer
 

ça devrait aussi marcher avec un DISTINCT à la place du GROUP BY.
 
$resultat = mysql_query("SELECT DISTINCT LEFT(`nom`,1) AS 'lettre' FROM `user` ORDER BY 'lettre'",$connexion) or die (mysql_error());

n°914427
sanglochon
Posté le 04-12-2004 à 00:45:46  profilanswer
 

J'ai fait de nouvelles corrections sur mon script et je coince de nouveau.
Alors aux données précedentes, j'ai rajoute une base contenant des infos supplementaires pour certains 'users'. Donc a chaque ligne de user ne correspond pas forcement une ligne dans user_admin.
 
Je souhaite recuperer la liste des premières lettres de chaque nom comme avant mais en prenant en compte de nouvelles choses notamment le fait que dans user_admin il n'y ai pas une colonne qui est une certaine valeur.(temp qui doit etre égal a rien)
 
Donc j'ai pondu ca :
mysql_query("SELECT LEFT(`nom`,1) AS 'lettre',id,id_user FROM `user`,`user_admin` WHERE user.id=user_admin.id_user AND temp='' GROUP BY 'lettre' ORDER BY 'lettre'",$connexion)
 
Ca me donne bien la liste des lettres sauf que ca ne me la donne que dans le cas ou l'on a une ligne dans la base usd_admin qui se refere à une ligne dans user.
 
Concretement, tous les NOM qui sont dans user mais pas dans user_admin n'apparaissent pas.
 
Et je suis bloqué...

n°914896
sanglochon
Posté le 04-12-2004 à 20:30:01  profilanswer
 

J'ai trouvé :
 
$resultat = mysql_query("SELECT LEFT(`nom`,1) AS 'lettre',id,id_user FROM `user`,`user_admin` WHERE (user.id=user_admin.id_user AND $temp='') OR (user.id>-1 AND isnull(user_admin.id_user)) GROUP BY 'lettre' ORDER BY 'lettre'",$connexion) or die (mysql_error());

n°916814
Arjuna
Aircraft Ident.: F-MBSD
Posté le 07-12-2004 à 11:30:04  profilanswer
 

Elle est originale te façon de faire des jointures externes.
 
Logiquement, on utilise plutôt :
 
select distinct left(nvl(user.nom, ' '), 1) as lettre, user.id, user_admin.id_user
from user right outer join user_admin on user.id = user_admin.id_user
 
PS: La syntaxe "à la SQL" je l'aime pas, du coup je l'utilise jamais. Donc pour la syntaxe du RIGHT OUTER JOIN, ainsi que l'ordre des tables, je n'en suis pas sûr. D'un point de vue conception, c'est pas contre à mon avis plus propre que ta requête :)
 
PS: Et prefixe tes champs par le nom de la table d'où il viennent ! Pour le "nom", je ne sais pas s'il vient de user ou de user_admin ! Si t'avais un "nom" dans les deux tables, MySQL ne saurait pas plus que moi lequel prendre. Il est IMPERATIF de préfixer tes champs. D'ailleurs, c'est peut-être parceque je suis un peu puriste, mais les SGBD devraient planter lamantablement sur un "select *", sur les champs pas préfixés, et surtout, sur les INSERT sans la liste des champs. Toutes ces syntaxes sont autant de sources de bugs débiles qui font perdre un temps monstre pour les localiser.


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

  [MYSQL]requete selective distingante

 

Sujets relatifs
Comment executer une requete SQL avec VB6 ?Newbie : Plusieurs appli pour une seule base MySQL ?
Rêquete imbriqué avec MySQLecrire dans une base MySQL avec VB
Requete ACCESS pour conserver la plus haute note[MySQL] WHERE avec NOT IN
[MySQL/JAVA]pb avec driver ODBCRequête croisée -> Etat sous Access
MySQL => Sélectionner l'année d'une date 
Plus de sujets relatifs à : [MYSQL]requete selective distingante


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