IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Probleme LIKE


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 8
    Points : 5
    Points
    5
    Par défaut 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

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Sans doute normal, car si tu ne saisis pas le model_id, sans changer ta requête, elle contient
    ce qui n'est pas le cas pour ton id_model = '15', donc cet enregistrement n'est pas trouvé !
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    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)

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Soit tu crées ta requête dynamiquement et c'est un problème php, soit, tu modifies ta requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (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.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    ok, donc je m'oriente sur une requete dynamique, donc j'ai poste au mauvais endroit

    je vais me faire taper sur les doigts si je reposte mon probleme dans le forum php ?

  6. #6
    Futur Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    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";

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme like avec champ numérique
    Par popofpopof dans le forum Access
    Réponses: 3
    Dernier message: 10/12/2007, 22h58
  2. Probleme like avec un blob
    Par yupa dans le forum SQL
    Réponses: 7
    Dernier message: 09/11/2007, 20h09
  3. Firebird Probleme like
    Par le-roy_a dans le forum SQL
    Réponses: 24
    Dernier message: 08/12/2006, 22h19
  4. Probleme LIKE
    Par Yphon dans le forum Langage SQL
    Réponses: 5
    Dernier message: 03/10/2005, 08h26
  5. Probleme like '%00' avec interbase
    Par BOUBOU81 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 27/10/2004, 11h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo