Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/01/2012, 11h14   #1
Membre régulier
 
Inscription : décembre 2006
Messages : 166
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 166
Points : 83
Points : 83
Envoyer un message via MSN à omdafer Envoyer un message via Skype™ à omdafer
Par défaut concaténation de champs dans WHERE

Bonjour, ma requête doit chercher dans une table 'photodumois' ou le champ 'auteur' correspond au valeur concaténé 'prenom' et 'nom' de ma table 'membre' grace à son id membre.
J'ai essayé ceci:
Code :
SELECT * FROM photodumois INNER JOIN membre ON membre.id=%s WHERE auteur = CONCAT(membre.prenom,' ',membre.nom)
omdafer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 11h40   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 668
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 668
Points : 2 676
Points : 2 676
Bonjour,

Et quel est le problème fait ?
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 21h05   #3
Membre régulier
 
Homme Francis Lennert
Développeur informatique
Inscription : novembre 2011
Messages : 52
Détails du profil
Informations personnelles :
Nom : Homme Francis Lennert
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : novembre 2011
Messages : 52
Points : 86
Points : 86
On pourrait imaginer que le problème est soit l'espace en plein milieu, soit des valeurs Null dans les données...
Je ferais donc un

Code SQL :
1
2
 
WHERE auteur = concat(ifnull(nom,""),ifnull(prenom,""))

ou en plus joli
Code SQL :
1
2
 
WHERE concat_ws("",Nom,prenom)

( Le concat_ws ne tient pas compte des valeurs Null ).

Mais ce ne sont que des suppositions...
Grandal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 09h56   #4
Membre émérite
 
Avatar de mactwist69
 
Homme Adrien
Développeur .NET
Inscription : janvier 2007
Messages : 924
Détails du profil
Informations personnelles :
Nom : Homme Adrien
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 924
Points : 978
Points : 978
Ou alors il y a trop d'espace entre nom et prénom...

Ces deux données devraient se trouver dans deux colonnes différentes normalement.
__________________
L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)
mactwist69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 10h11   #5
Membre régulier
 
Inscription : décembre 2006
Messages : 166
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 166
Points : 83
Points : 83
Envoyer un message via MSN à omdafer Envoyer un message via Skype™ à omdafer
Non, le champ auteur contient "Prenom Nom" en toutes lettres.

Je ne connais que l'id de l'auteur qui se trouve dans la table membre. Je souhaiterai dans la même requête obtenir toutes les lignes de photodumois dont le champ photodumois.auteur = membre.prenom.' '.membre.nom
omdafer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 10h18   #6
Membre régulier
 
Inscription : décembre 2006
Messages : 166
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 166
Points : 83
Points : 83
Envoyer un message via MSN à omdafer Envoyer un message via Skype™ à omdafer
En fait il y a rien qui sort avec
Code :
SELECT * FROM photodumois INNER JOIN membre ON membre.id=%s WHERE photodumois.auteur = CONCAT(membre.prenom,' ',membre.nom)
Ni avec
Code :
SELECT * FROM photodumois INNER JOIN membre ON membre.id=%s WHERE photodumois.auteur = CONCAT_WS(' ', membre.prenom, membre.nom)
Entre prenom et nom il n'y a qu'un seul espace, j'ai vérifié. prenom et nom n'est jamais null, donc je ne les remplace jamais par des quotes "".

Je ne peux plus revenir en arrière pour changer la table photodumois, elle était destinée pour une animation flash qui récupère un nom de fichier, l'auteur (en toute lettre, en texte). Mais j'ai mal pensé pour après quand le membre devra administrer ses photos du mois, voir spcd.org.
omdafer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 11h24   #7
Membre émérite
 
Avatar de mactwist69
 
Homme Adrien
Développeur .NET
Inscription : janvier 2007
Messages : 924
Détails du profil
Informations personnelles :
Nom : Homme Adrien
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 924
Points : 978
Points : 978
petite question :

le %s c'est du code C ?
parce que si c'est du pur SQL... je comprends pas bien. Et à cause du INNER, si il n'y a pas de "lien", il ne te sortira rien.

Remplace par un left, tu verra
__________________
L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)
mactwist69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 11h38   #8
Membre régulier
 
Inscription : décembre 2006
Messages : 166
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 166
Points : 83
Points : 83
Envoyer un message via MSN à omdafer Envoyer un message via Skype™ à omdafer
j'utilise un sprintf() en php.

Code :
sprintf("SELECT * FROM photodumois INNER JOIN membre ON membre.id=%s WHERE photodumois.auteur = CONCAT(membre.prenom,' ',membre.nom)", GetSQLValueString($idmembre, "int"));
omdafer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 12h07   #9
Membre émérite
 
Avatar de mactwist69
 
Homme Adrien
Développeur .NET
Inscription : janvier 2007
Messages : 924
Détails du profil
Informations personnelles :
Nom : Homme Adrien
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 924
Points : 978
Points : 978
Mais il n'y a pas de jointure alors ?

La jointure doit se faire entre membre et photiodumois.

Ca devrait ressembler à ça:

Code :
"SELECT * FROM photodumois INNER JOIN membre ON membre.id=photodumois.id_membre WHERE photodumois.auteur = CONCAT(membre.prenom,' ',membre.nom)"
__________________
L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)
mactwist69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 12h34   #10
Membre régulier
 
Inscription : décembre 2006
Messages : 166
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 166
Points : 83
Points : 83
Envoyer un message via MSN à omdafer Envoyer un message via Skype™ à omdafer
Mais le champ photodumois.id_membre n'existe pas. Je ne pensai pas en avoir besoin de l'id membre au départ.
Si je l'avais mis, je n'aurai pas eu besoin de la table membre.

Citation:
Envoyé par mactwist69 Voir le message
Mais il n'y a pas de jointure alors ?

La jointure doit se faire entre membre et photiodumois.

Ca devrait ressembler à ça:

Code :
"SELECT * FROM photodumois INNER JOIN membre ON membre.id=photodumois.id_membre WHERE photodumois.auteur = CONCAT(membre.prenom,' ',membre.nom)"
omdafer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 12h49   #11
Membre confirmé
 
Homme Benjamin
Consultant informatique
Inscription : août 2007
Messages : 160
Détails du profil
Informations personnelles :
Nom : Homme Benjamin
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2007
Messages : 160
Points : 248
Points : 248
Code :
1
2
3
4
5
SELECT *
FROM photodumois
INNER JOIN membre
ON photodumois.auteur = CONCAT_WS(' ', membre.prenom, membre.nom)
WHERE membre.id=%s
bhamp0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 12h57   #12
Membre régulier
 
Inscription : décembre 2006
Messages : 166
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 166
Points : 83
Points : 83
Envoyer un message via MSN à omdafer Envoyer un message via Skype™ à omdafer
Oh bien oui! et C'est plus logique :
Citation:
Envoyé par bhamp0 Voir le message
Code :
1
2
3
4
5
SELECT *
FROM photodumois
INNER JOIN membre
ON photodumois.auteur = CONCAT_WS(' ', membre.prenom, membre.nom)
WHERE membre.id=%s
Merci à tous pour votre aide.
omdafer est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h08.


 
 
 
 
Partenaires

Hébergement Web