Probleme requete avec LIKE

Signaler
Messages postés
40
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
3 décembre 2008
-
Messages postés
40
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
3 décembre 2008
-
Bonjour,

Voila je n'arrive pas à exprimer ma requete.
Je souhaiterai afficher tout les éléments d'un enregistrement présents dans une table où une des colonnes de la table contient une partie de ma chaine de caractéres .

C'est bien sur une partie de la chaine de caractères et non sur l'ensemble de la chaîne de caractères que ma recherche s'effectue. Ou sinon ca serait la clause LIKE qu'il faudrait utiliser avec des % si j'ai bien compris.

Comment fait-on pour chercher dans une chaine de caractères?

Voici ma question version requete :

$auteur = Jean, Paul, Pierre ;

SELECT * FROM sons WHERE auteur LIKE '%$auteur%' ;

Mais je veux que Pierre !

Merci de votre aide

19 réponses

Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
7
Salut,

En fait ce que tu voudrais c'est prendre tous les auteurs qui s'appelleraient Jean, Paul ou Pierre.

Dans la clause LIKE qui tu fais là, en fait tu prendrais tous les auteurs qui vaudraient "quelquechose"+"Jean, Paul, Pierre"+"quelquechose".... Drôle de prénom, non?

En fait, du coup, il te suffit simplement de faire l'inverse :

SELECT * FROM sons WHERE $auteur LIKE '%'||auteur||'%'

Normalement, je pense répondre à ta question
Messages postés
40
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
3 décembre 2008

voila c'est exactement ça mon problème !
donc à quoi correspondent les "||"?
on peut changer l'ordre dans la requete sql?
Parce que la moi je comprends que c'est ma variable qui a le nom de la table.. Ca risque pas de me faire une erreur puisque ma table n'a pas de champs " Jean, Paul, Pierre" ?

Merci pour tes réponses
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
7
Re,
Les "||", c'est l'opérateur de concaténation de chaînes de caractères donc voilà si tu veux concaténer ben tu fais avec ça.

Ensuite, dans un where c'est une condition donc cette condition tu peux la tourner dans tous les sens.
Avec la condition que TU as proposé ça voulait dire ça :
   Est ce que le champs auteur contient "Jean, Paul, Pierre"?
Alors que la mienne veut dire :
   Est ce que le champs auteur est contenu dans "Jean, Paul, Pierre"?
Ou encore
   Est ce que la variable "Jean, Paul, Pierre" contient le champs auteur?
Ce qui, me semble-t-il est plus ce que tu veux, non?

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
Messages postés
40
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
3 décembre 2008

oui c'est exactement ce qu'il me faut.
Ben je teste tout ça en rentrant ce soir et je te fais signe!!

Merci encore!
Messages postés
40
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
3 décembre 2008

RE,

Comme prévu je n'arrive pas à utiliser la requete

Voila ma requete :

SELECT * FROM sons WHERE artistes LIKE '%'||auteur||'%' OR artistes LIKE '%'||tag||'%' LIMIT 3;

Requête : SELECT * FROM sons WHERE {NomArtiste}, {NomArtiste}, {NomArtiste} LIKE '%||auteur||%' OR artistes LIKE '%'||tag||'%' LIMIT 3
Erreur
n°1064 : You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use
near ' {NomArtiste}, {NomArtiste} LIKE '%||auteur||%' OR artistes LIKE
'%'||tag||'%' LIMIT 3' at line 1
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\xxxxxxxx.com-v3\see_video.php on line 166

Où est située mon erreur?

Help!
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
7
Re,

Visiblement, ta variable "artistes" que tu veux comparer, c'est un tableau???
Si c'est bien un tableau, tu dois accéder à chaque élément, un par un genre

SELECT * FROM sons WHERE artiste[0] LIKE '%'||auteur||'%' ....

<hr size="2" width="100%" /> C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
Messages postés
40
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
3 décembre 2008

atta merde je me suis gourré
je refais

la table = sons
le champ = artistes
la variable = $auteur .

Et non je ne pense pas que ce soit un tableau...Qu'est-ce qui te fait dire ça?
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
7
Ces trucs là {NomArtiste}, {NomArtiste}, {NomArtiste}

<hr size="2" width="100%" /> C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
Messages postés
40
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
3 décembre 2008

non ca c'etait pr cacher les noms des artistes....j'aurai pu mettre Pierre, Paul , Jean...
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
7
Oula...
Que fais tu???
Dans ta requête, tu mets "Pierre, Paul, Jean" en dur comme ça???
Ou tu mets la variable entière dans ta requête?

Dans les clauses WHERE, ils sont formés ainsi :

WHERE champ1 "operateur de comparaison" champs2 [AND ...]

Il faut faire champs par champ pour comparer

Imaginons que tu passes en dur dans ta requête, ça donnerait ceci :

SELECT *
FROM sons
WHERE 'Pierre, Paul, Jean' LIKE '%'||artistes||'%'

Ainsi, si dans ta tables "sons", il y a "artistes" qui vaut 'Pierre' ou 'Paul' ou 'Jean', ta reqûete te retournera l'enregistrement

<hr size="2" width="100%" /> C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
Messages postés
40
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
3 décembre 2008

non moi je met la variable de cette manière $variable.. mais dans le message d'erreur la variable est lue telle qu'elle est.

J'ai executé la requete telle que tu l'as écrite (avec la variable bien sur, pas sa valeur en dur), mais ca me donne une erreur....
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
7
Quelle est l'erreur?
Est ce que dans ta variable $variable, tu as bien mis les simples quotes --> ' ' genre
$variable = 'Pierre, Paul, Jean';
?

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
Messages postés
40
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
3 décembre 2008

Ma variable en fait c'est un élément d'un fetch_array d'une requete précédente sur une autre table :

$auteur = $videos['artistes'];

Bon pour tout te dire c'est sur une page de videos en streaming. Et en fonction du nom de l'artiste dont la video tourne, je veux afficher des mp3 de cet artiste à écouter, si il y en a. Donc je recupère la variable de la requete d'avant...

C'est peut être pas la manière la plus académique de procéder, mais je suis pas très à l'aise avec les requetes multitables...
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
7
Et si tu affiches $auteur avant de la mettre dans ta requête, tu obtiens quoi?

Je pense qu'il doit être mal formé, en tout cas, visiblement, il te manque les quote là.
Mets ça plutôt :

$auteur = '\'' + $video['artistes'] + '\'';

Je me rappelle plus trop du php , il me semble que c'est comme ça, ou comme ça :

$auteur = "\'" + $video['artistes'] + "\'";

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
Messages postés
40
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
3 décembre 2008

si je l'affiche j'ai bien la valeur de ma variable qui s'affiche...et g l'habitude de fonctionner comme ça..Et sa fonctionne, ben écoute la g pas mon code sur moi je suis o taff...mais je comprend pas l'utilité des quotes en fait.
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
7
Ben en fait si tu mets pas les quotes dans ta requete SQL, MySQL va croire que c'est un champs de ta table ou une variable de MySQL, ce qui n'est pas le cas!
En mettant les quotes, tu lui dis bien que c'est une chaîne de caractères et donc voilà, pas d'ambiguïtées!

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
Messages postés
40
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
3 décembre 2008

Mais si dans notre cas je met ça :

SELECT * FROM nom WHERE '$auteur' LIKE '%'||artistes||'%';

Ya encore besoin de mettre des quotes dans la variable $auteur?
Messages postés
744
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
9 mai 2010
7
Ah ben, non dans ce cas non... Là ça devrait marcher sans soucis.

Donc si tu fais ça, dans ta variable $auteur, il doit y avoir un truc comme ça :

$variable = 'Paul, Pierre, Jean';

Et dans "artistes" de ta table "nom", il doit y avoir soit 'Pierre', soit 'Paul', soit 'Jean' ou autre bien sûr

C'est ça?

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
Messages postés
40
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
3 décembre 2008

oui voila..bon j'essai de faire ca kan je rentre!