Requête SQL avec l'oéperateur Like

Fermé
misig - 21 oct. 2007 à 05:35
ilan27 Messages postés 394 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 15 juin 2009 - 28 oct. 2007 à 19:52
Bonjour,
J'aimerais écrire une requête sql du type
SELECT * FROM Table1 WHERE (((Table1.Noms) Like "*abc*"));
On sait que cette requête va chercher tous les Noms de la Table1 qui contiennent la chaine abc
je veux que le paramètre Like cherche plutôt dans une autre Table2 au lieu de spécifier moi même la chaîne
On peut avoir la Table2 comme suit :
abc
acr
frt
L'idée est que si je veux changer les chaînes, je modifie seulement la Table2 sans rentrer dans le code sql de la requête
Merci
A voir également:

5 réponses

ilan27 Messages postés 394 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 15 juin 2009 36
21 oct. 2007 à 11:38
Bonjour, si j'ai bien compris, il suffit que tu crées un tableau de données avec le contenu de la table2:

$req=mysql_query("SELECT * FROM Table2");
$don=mysql_fetch_array($req);

En supposant que le champ s'appelle nom, tu ecris ainsi:

$req2=mysql_query("SELECT COUNT(*) AS nb FROM Table2");
$nb=$req2['nb'];

//Le nb d'enregistrements, pour la boucle for. Et pour chacun des enregistrements, tu vas faire la demande du
//like avec la chaine de l'enregistrement correspondant:

for(int i =0; i<$nb;i++){
$exemple=mysql_query("SELECT * FROM Table1 WHERE (((Table1.Noms) Like "*".$don['nom']."*"))");
...
}
1
Merci ilan27 mais je pense que ca ne marche pas
voilà comment j'ai fait:
- j'ai les 2 tables, Table1 et Table2
- j'ai crée une nouvelle requête
- j'ai ajouté la Table1 et dans le champs correspondant, Table1.Noms, je suis allé dans Affichage >> SQL et j'ai écrit le code en commencant par :
$req=mysql_query("SELECT * FROM Table2");
mais je recois le message comme quoi il manque Select, Update ou,,,,
Donc il ne faut pas que le code SQL commence par autre chose que Select, Update, Insert,,,,
Une autre question, c quoi le $exemple dans ton code
Gros merci pour ton aide
0
ilan27 Messages postés 394 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 15 juin 2009 36
21 oct. 2007 à 20:14
Attends, je me suis totalement emmélé les pinceaux quand je revois mon code!! :D

Essaye plutot comme ça:

$req=mysql_query("SELECT * FROM Table2");
while($don=mysql_fetch_array($req)){
//Pour chaque enregistrement de Table2 on fait:
$exemple=mysql_query("SELECT * FROM Table1 WHERE (((Table1.Noms) Like "*".$don['nom']."*"))");
//$exemple est la requete qui contient les enregistrements de Table1 qui sont "comme $don['nom'] "; en fait tu le redéfinis pour chaque
//enregistrement de Table2
}

Ca marche mieux comme ça?
0
Salut ilan27,
j'ai essayé le code mais ca ne marche pas
peux-tu me dire ou je dois ecrire le code (dans module) ou dans le code sql de la requete elle même
peux-tu me dire stp étape par etape
merci bien
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ilan27 Messages postés 394 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 15 juin 2009 36
28 oct. 2007 à 19:52
En fait, c'est pour l'afficher avec du code php? Parce que je n'ai pas tenu compte de ça, je t'ai donné le code en php et sql pour pouvoir afficher ci besoin.
Si oui, réessaye ainsi, j'ai encore arrangé:

$req=mysql_query("SELECT * FROM Table2");
while($don=mysql_fetch_array($req)){
//Pour chaque enregistrement de Table2 on fait:
$exemple=mysql_query("SELECT * FROM Table1 WHERE ((Table1.Noms) Like *".$don['nom']."*)");
//$exemple est la requete qui contient tous les enregistrements de Table1 dont le nom est "comme $don['nom'] "; en fait tu le redéfinis
//pour chaque enregistrement de Table2
//puis on en fait un tableau, et tu peux l'afficher:
$resultat=mysql_fetch_array($exemple);
echo $resultat['nom'];
}
0