-
Probleme LIKE
Bonjour tout le monde
tout d'abord je tourne sur MySQL et Php
j'ai une requete qui s'effectue sur plusieurs tables :
$query_rsridesearch = "SELECT DISTINCT db_ride.ride_id, db_ride.ride_name1, db_ride.status_id, db_status.status_id, db_status.status_name, db_ride.type_id, db_type.type_id, db_type.type_name, db_ride.cat_id, db_cat.cat_id, db_cat.cat_name, db_ride.builder_id, db_builder.builder_id, db_builder.builder_name, db_ride.model_id, db_model.model_id, db_model.model_name
FROM db_ride, db_status, db_type, db_cat, db_builder, db_model
WHERE db_ride.ride_name1 LIKE '%$ride_name1%'
AND db_ride.status_id LIKE '%$status_id%'
AND db_ride.status_id=db_status.status_id
AND db_ride.type_id LIKE '%$type_id%'
AND db_ride.type_id=db_type.type_id
AND db_ride.cat_id LIKE '%$cat_id%'
AND db_ride.cat_id=db_cat.cat_id
AND db_ride.builder_id LIKE '%$builder_id%'
AND db_ride.builder_id=db_builder.builder_id
AND db_ride.model_id LIKE '%$model_id%'
AND db_ride.model_id=db_model.model_id
ORDER BY $tri $order";
cette requete fonctionne, sans messages d'erreur, mais elle ne genere pas le resultat voulu
exemple : je cherche tous les enregistrements dont model_id = 15
la il m'affiche tous les modeles contenant 15 / 115 / 215 ....
ce qui est normal car j'utilise LIKE '%...%'
donc je remplace par :
...
AND db_ride.model_id = '$model_id'
AND db_ride.model_id=db_model.model_id
ORDER BY $tri $order";
et là est mon probleme, il m'affiche bien l'id model 15 et seulement le 15, mais si je ne saisi pas de model_id, mais par exemple un cat_id seulement il me trouve 0 resultats :(
le probleme est visible ici : http://www.ridesdb.com/db/ride_search.php
je n'y comprend plus rien, j'ai passé mon week end dessus
si quelqu'un pouvait avoir la bonte de m'indiquer mon erreur ce serait fort aimable
cordialement
Frenzy
-
Sans doute normal, car si tu ne saisis pas le model_id, sans changer ta requête, elle contient
Code:
db_ride.model_id = ''
ce qui n'est pas le cas pour ton id_model = '15', donc cet enregistrement n'est pas trouvé !
-
donc le probleme est identifié, merci :)
maintenant comment le resoudre ?
fractionner la requete en lui disant par exemple : si il n'y a pas d'id_model envoye par le formulaire n'effectue pas la clause contenant model_id ???
je ne vois pas d'autres solutions à premiere vue, le probleme c'est que je ne sais meme pas si ma solution hypothetique est realisable techniquement parlant sur la requete, car il faudra mettre en condition les clauses ou il y a : status_id, cat_id, type_id, builder_id et model_id
EDIT : j'ai essaye de mettre des OR a la place de certains AND ça marche carrement plus
en fait le reel probleme si je met
...
AND db_ride.model_id = '$model_id'
AND db_ride.model_id=db_model.model_id
ORDER BY $tri $order";
au lieu de LIKE c qu'il me trouve toujours 0 resultats car tous les champs de mon moteur sont optionnels, donc avec le = j'aurai tjrs des resultats vides si le visiteur ne selectionne pas TOUS les criteres, or je veux que le formulaire passe meme si on ne rempli aucun champ (ce qui retourne logiquement tous les resultats)
-
Soit tu crées ta requête dynamiquement et c'est un problème php, soit, tu modifies ta requête :
Code:
(db_ride.model_id = '$model_id' OR $model_id IS NULL)
Comme je ne connais pas php, je ne sais pas comment manipuler les variables (peut-être faut-il mettre des ', peut-être faut-il écrire $model_id = '' au lieu de IS NULL... A toi de voir.
-
ok, donc je m'oriente sur une requete dynamique, donc j'ai poste au mauvais endroit :cry:
je vais me faire taper sur les doigts si je reposte mon probleme dans le forum php ?
-
j'ai enfin trouve la solution au probleme, je poste la requete corrigee, ça peut toujours servir a quelqu'un, et merci encore pour le coup de pouce :
$query_rsridesearch = "SELECT DISTINCT db_ride.ride_id, db_ride.ride_name1, db_ride.status_id, db_status.status_id, db_status.status_name, db_ride.type_id, db_type.type_id, db_type.type_name, db_ride.cat_id, db_cat.cat_id, db_cat.cat_name, db_ride.builder_id, db_builder.builder_id, db_builder.builder_name, db_ride.model_id, db_model.model_id, db_model.model_name
FROM db_ride, db_status, db_type, db_cat, db_builder, db_model
WHERE db_ride.ride_name1 LIKE '%$ride_name1%'
AND (db_ride.status_id='$status_id' OR '$status_id'='')
AND db_ride.status_id=db_status.status_id
AND (db_ride.type_id='$type_id' OR '$type_id'='')
AND db_ride.type_id=db_type.type_id
AND (db_ride.cat_id='$cat_id' OR '$cat_id'='')
AND db_ride.cat_id=db_cat.cat_id
AND (db_ride.builder_id='$builder_id' OR '$builder_id'='')
AND db_ride.builder_id=db_builder.builder_id
AND (db_ride.model_id='$model_id' OR '$model_id'='')
AND db_ride.model_id=db_model.model_id
ORDER BY $tri $order";