Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum 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 17/11/2010, 14h59   #1
Invité régulier
 
Inscription : janvier 2009
Messages : 60
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 60
Points : 9
Points : 9
Par défaut Savoir si le texte extrait de la BDD est contenu dans une variable ?

Bonjour,

J'ai le problème suivant :

je voudrais comparer le texte récupéré dans une BDD à une variable. Pour le moment, j'utilise :

Code :
$q=mysql_query("SELECT categorie FROM ebooks_LH WHERE titre LIKE \"%$titre%\"") or die (mysql_error());
Mais étant donné que la variable $titre est en général une version "allongée" de ce qui se trouve dans "titre" de la BDD (par ex. pour le titre d'un livre : "Les aventures de Tintin et Milou" au lieu de "Tintin et Milou"), comment faire pour qu'il prenne en compte toutes les occurrences de titre au sein de la variable $titre ?

Merci !
cyberlp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 15h18   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 928
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 928
Points : 18 117
Points : 18 117
Envoyer un message via MSN à CinePhil
Il suffit d'inverser le WHERE :
Code :
WHERE '$titre' LIKE '%' || titre || '%'
En SQL, les valeurs textuelles s'écrivent entre apostrophes, pas entre guillemets
La double barre verticale est l'opérateur de concaténation.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 16h50   #3
Invité régulier
 
Inscription : janvier 2009
Messages : 60
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 60
Points : 9
Points : 9
Merci.

Par contre ça ne marche toujours pas, je me demande si cela ne vient pas d'une recherche case sensitive ?
cyberlp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 16h56   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 928
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 928
Points : 18 117
Points : 18 117
Envoyer un message via MSN à CinePhil
Met ta requête dans une variable et fais-en un echo avant de l'envoyer au serveur pour voir son texte exact :
Code :
1
2
3
4
5
6
$requete = "
SELECT categorie 
FROM ebooks_LH 
WHERE '$titre' LIKE '%' || titre || '%'
";
echo '<br />'.$requete;
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 17h06   #5
Invité régulier
 
Inscription : janvier 2009
Messages : 60
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 60
Points : 9
Points : 9
ok il affiche bien la variable $title comme il faut
du coup je ne vois pas d'où vient le problème, en sachant que si $title et title sont identiques, ça marche bien

Code :
SELECT categorie FROM ebooks_LH WHERE 'Naruto, Tome 45 : Konoha, théâtre de guerre !!' LIKE '%' || titre || '%
cyberlp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 17h42   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 928
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 928
Points : 18 117
Points : 18 117
Envoyer un message via MSN à CinePhil
Et qu'y a t-il comme données selon toi correspondantes dans la colonne titre ?

Je viens de faire un petit test. Il semble que MySQL n'aime pas l'opérateur de concaténation normalisé || !

Essaie comme ceci :
Code :
WHERE '$titre' LIKE CONCAT('%', titre, '%')
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 18h22   #7
Invité régulier
 
Inscription : janvier 2009
Messages : 60
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 60
Points : 9
Points : 9
Dans la colonne titre il y a, dans l'exemple cité :

"Naruto, tome 45"

Sinon la nouvelle suggestion ne fonctionne pas
cyberlp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 19h03   #8
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 928
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 928
Points : 18 117
Points : 18 117
Envoyer un message via MSN à CinePhil
Erreur ou pas de résultat ?

Je viens de tester sur une de mes tables et ce principe fonctionne.
Dans la table j'ai un username = 'plemenager' et la requête suivante me donne le bon résultat :
Code :
1
2
3
SELECT * 
FROM users 
WHERE 'plemenager Einstein' LIKE CONCAT('%', username, '%')
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 19h26   #9
Invité régulier
 
Inscription : janvier 2009
Messages : 60
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 60
Points : 9
Points : 9
Code :
1
2
3
4
5
6
7
$title=addslashes($title);
			if ($title!=null) {
			$q=mysql_query("SELECT categorie FROM ebooks_LH WHERE titre LIKE '%$title%'") or die (mysql_error());
				if ($q==true) { 
				$r=mysql_fetch_array($q);
				}
		  }
ce qui marche

dès que j'utilise ton code, ça ne fait pas d'erreur, juste pas de résultat.
cyberlp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 09h34   #10
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 928
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 928
Points : 18 117
Points : 18 117
Envoyer un message via MSN à CinePhil
Ton code fonctionne si $title est égal ou inclus dans titre mais tu demandais l'inverse il me semble.
Je ne comprends pas pourquoi mon code ne fonctionnerait pas chez toi.

As-tu testé la requête directement dans MySQL avec des valeurs qui devraient logiquement retourner un résultat ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 09h50   #11
Invité régulier
 
Inscription : janvier 2009
Messages : 60
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 60
Points : 9
Points : 9
Oula, oui c'est curieux, ta requête directement effectuée dans MySQL ne retourne aucun résultat.

Code :
1
2
3
SELECT categorie 
FROM ebooks_LH
WHERE 'Naruto' LIKE CONCAT('%', titre, '%')
Pourtant les champs 'categorie' et 'titre' existent bien, la table s'appelle bien ebooks_LH, et il y a bien un titre dans la base qui contient le mot "Naruto".

cyberlp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 10h00   #12
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 928
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 928
Points : 18 117
Points : 18 117
Envoyer un message via MSN à CinePhil
Il faudrait te décider sur le sens de la condition !

Au début, tu as fait une requête avec ce WHERE :
Code :
WHERE titre LIKE '%$titre%'
Ceci suppose que la variable $titre soit égale ou incluse dans la colonne titre.
Si titre = 'Naruto, tome 45' et $titre = 'Naruto' => OK
Si titre = 'Naruto' et $titre = 'Naruto, tome 45' => KO

Mais tu as dit toi-même dans ton premier message que c'est le deuxième cas qui te préoccupe :
Citation:
Mais étant donné que la variable $titre est en général une version "allongée" de ce qui se trouve dans "titre" de la BDD
Ce à quoi j'ai répondu qu'il fallait inverser la condition pour arriver à ma requête qui fonctionne :
Code :
WHERE '$titre' LIKE CONCAT('%', titre, '%')
Si $titre = 'Naruto, tome 45' et titre = 'Naruto' => OK
Si $titre = 'Naruto' et titre = 'Naruto, tome 45' => KO

Après avoir essayé ma requête directement dans MySQL, tu dis dans ton dernier message :
Citation:
il y a bien un titre dans la base qui contient le mot "Naruto".
J'ai l'impression qu'on se retrouve dans le cas de la première requête !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 12h11   #13
Invité régulier
 
Inscription : janvier 2009
Messages : 60
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 60
Points : 9
Points : 9
Non, non, je me suis mal exprimé.

Quand je dis "dans la base il y a le mot Naruto", il y a dans la base :

"Naruto, tome 44"

et dans la variable $titre :

"Naruto, Tome 44 : les aventures blablabla"
cyberlp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 12h18   #14
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 928
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 928
Points : 18 117
Points : 18 117
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par cyberlp Voir le message
il y a dans la base :

"Naruto, tome 44"

et dans la variable $titre :

"Naruto, Tome 44 : les aventures blablabla"
Si le jeu de caractères utilisé dans la BDD est sensible à la casse et si le texte que tu viens de donner est strictement celui-là, c'est normal que tu n'aies pas de réponse avec ma requête !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 12h20   #15
Invité régulier
 
Inscription : janvier 2009
Messages : 60
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 60
Points : 9
Points : 9
Si ça vient de ça, je fais comment, je mets UPPER() avant titre et $titre dans la requête ?
cyberlp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 12h23   #16
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 928
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 928
Points : 18 117
Points : 18 117
Envoyer un message via MSN à CinePhil
Tu peux en effet essayer comme ça ou jouer avec COLLATE.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 13h42   #17
Invité régulier
 
Inscription : janvier 2009
Messages : 60
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 60
Points : 9
Points : 9
Code :
"SELECT categorie FROM ebooks_LH WHERE UPPER('$titre') LIKE UPPER(CONCAT('%', titre, '%'))"
comme cela ?

pas d'erreur mais toujours pas d'affichage...
cyberlp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h32.


 
 
 
 
Partenaires

Hébergement Web