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

PHP & Base de données Discussion :

[SQL] Requete SELECT un peu confuse


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 78
    Points : 28
    Points
    28
    Par défaut [SQL] Requete SELECT un peu confuse
    bonjour,

    je suit en train de créer un formulaire de recherche qui permet de chosir plusieur critère. Le truc c'est que je n'arrive pas à obtenir les enregistrements que je veux. En gros mon code est le suivant
    mysql_select_db($database_conn_bt_articles, $conn_bt_articles);

    $query_rsdonneesBdd =sprintf("SELECT Titre,Corps FROM classification WHERE CL_autresSupport LIKE '%%%s%%' OR CL_support LIKE '%%%s%%' OR CL_typeDeSupport LIKE '%%%s%%' OR CL_localisationSupport LIKE '%%%s%%' OR CL_année LIKE '%%%s%%' OR CL_mois LIKE '%%%s%%' OR CL_secteur LIKE '%%%s%%' OR CL_regionDeptConcerne LIKE '%%%s%%' OR CL_autresRegion LIKE '%%%s%%' OR Titre LIKE '%%%s%%' OR Corps LIKE '%%%s%%' ", $autresSupport_rsdonneesBdd, $support_rsdonneesBdd,$typeDeSupport_rsdonneesBdd,
    $localisationSupport_rsdonneesBdd, $annee_rsdonneesBdd, $mois_rsdonneesBdd, $secteur_rsdonneesBdd, $regionDeptConcerne_rsdonneesBdd, $autresRegion_rsdonneesBdd,
    $motcle_titre_rsdonneesBdd,$motcle_texte_rsdonneesBdd);

    $rsdonneesBdd = mysql_query($query_rsdonneesBdd, $conn_bt_articles) or die(mysql_error());
    $row_rsdonneesBdd = mysql_fetch_assoc($rsdonneesBdd);
    $totalRows_rsdonneesBdd = mysql_num_rows($rsdonneesBdd);
    donc je souhaite comprendre exactement comment tout cela focntionne et s'il existe d'autres opération que AND ou OR pour effectuer ma recherche. Pour le moment j'arrive juste a obtenir soit tous les enregsitrements (que des OR) soit aucun(que des AND) car je demande quelque chose de trop précis et j'aimerais seulement renseigner quelques champs.

    avez vous une idée? d'avance merci

  2. #2
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut
    est ce que tu as un message d'erreur?

    fais: echo ($rsdonneesBd);

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 78
    Points : 28
    Points
    28
    Par défaut
    je n'ai pas de message d'erreur, je voudrais juste qu'il ne me renvoi pas tous les enregistrements des que je fais une requete. alors y aurit t'il méthode pour qu'il vérifie les champs renseigner et qu'il me retourne tous les article qui concerne le departement 44 du mois d'avril par exemple.

    Est ce que je suis clair?

    je dois y aller, je vérifierai vos réponse demain.

    merci encore

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    deja je te conseille d'abandonenr le sprintf

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 78
    Points : 28
    Points
    28
    Par défaut
    merci de ta réponse boo64 mais je ne vois pas pourquoi je devrai enlever le "sprintf" et ensuite ma question était comment faire pour ne pas avoir une requete trop restrictive ou trop large pour que les enregistrements que j'obtient soit pertinent.

    Si je place dans ma requete que des AND entre chaque condition, je n'obtient aucun résultat et si je place que des OR j'obtient tous les enregistrement de la base.

    y'aurait il une solution a ce problème ou est ce que ma base a été ma crée? j'avoue que je suis un peu perdu.

  6. #6
    Membre régulier Avatar de djedje37et28
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 224
    Points : 84
    Points
    84
    Par défaut
    si tu as du mal avec le sql regardes ca:
    http://eric.univ-lyon2.fr/~jdarmont/tutoriel-sql/
    sinon précises ce que tu veux que ta requete face .
    merci

  7. #7
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    il semble que tu aies besoin de travailler ton sql : http://sql.developpez.com/.
    Si je place dans ma requete que des AND entre chaque condition, je n'obtient aucun résultat et si je place que des OR j'obtient tous les enregistrement de la base.
    oui, jusque là ça paraît assez normal, c'est de la logique :
    - AND : toutes tes conditions doivent être vraies
    - OR : 1 seule condition doit être vraie

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 78
    Points : 28
    Points
    28
    Par défaut
    Merci pour ton tuto.

    En fait j'ai créer un formulaire de recherche avec différents champs ( à completer ou liste déroulante). l'utilisateur peut s'il le souhaite ne remplir qu'une partie de ces champs. Prenons un exemple, il sélectionne dans le menu déroulant support "le journal des entreprise" puis dans le menu déroulant région " région pays de la loire". mais il laisse les autres champs vide car il veut effectuer une recherche sur tous les numéros du journal des entreprise qui sont paru dans les pays de la loire.

    c'est a ce moment la que ma requete entre en jeu. j'aimerais que meme si je n'est pas completer tous les champs du formulaire, elle me retourne les enregistrements concernés.

    Le truc c'est que j'ai beau manipuler ma requete en remplacant AND par OR ou encore en les mélageant dans ma requete rien n'y fais, je suis toujours face au meme probleme. soit ma requete ne me retourne aucun enregistrement (que des AND) soit elle me retourne tous enrgistrement (que des OR).

    voila ce que j'attend de ma requete.

    j'espère avoir été clair

  9. #9
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    laisse le soin à l'utilisateur de choisir dans une liste déroulante "ET" ou "OU" entre tes critères de recherche, que tu traduis par "AND" ou "OR" dans ta requete, tout en ignorant les critères de recherche qui n'ont pas été utilisés.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 78
    Points : 28
    Points
    28
    Par défaut
    Comment puis-je traduire ce choix de ET/OU depuis mon formulaire vers ma requete en SQL et ensuite comment faire pour ignorer les champs non renseignés?

  11. #11
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    tu fais une liste déroulante ET/OU dans ton formulaire entre tes critères (e.g. support ET/OU région ET/OU....)
    J'imagine que tu as un nombre de critères limité?

    Pour ne pas prendre en compte les critères non modifiés, il faut sans doute que tu jous avec la valeur par défaut de chaque critère....e.g. par défaut pour chaque liste déroulante tu sélectionnes le mot "Choisissez...". SI au moment du traitement de ton formulaire tu trouves la valeur "Choisissez.., cela signifie que l'utilisateur ne l'a pas utilisé pour sa sélection....

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 78
    Points : 28
    Points
    28
    Par défaut
    oki je vois comment faire mais le truc c'est que j'ai une douzaine de critère. donc l'uitilisateur ne va pas s'amuser a faire un choix de ET OU à chaque fois.

  13. #13
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    et bien à ce moment là, une autre solution est peut-être l'utilisation d'AJAX, ou un rechargement de formulaire.
    Pour chaque critère sélectionné, tu fais une vérif dans ta base de données et tu mets à jour tes listes déroulantes pour n'afficher que les critères correspondant aux critères que l'utilisateur a sélectionné....je ne sais pas si je suis clair....

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    je te deconseille le sprintf pasque il est quand meme lourd alor que ca revient au eùe et est plus lisible enfin c'est que mon avis

    $req ="select a,b from matable where a = $mavariable" avec $mavariable entre cote si c'est une chaine de caractere

  15. #15
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    +1 avec Boo abandonne le sprintf qui est une horreur niveau lisiblité (et don débuggage), d'ailleurs on te l'avait déjà dit dans un autre topic

    Perso je pense pas qu'il faille s'embêter avec des OR / AND, ce que tu veux c'est juste une requête avec un nombre variable de conditions (donc avec que du AND).

    L'idée est la suivante (en algo) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $req = "SELECT * FROM table WHERE 1=1"
    TANT QUE conditions FAIRE
       $req .= " AND condition=valeur"
    FIN TANT QUE
    Les conditions tu les récupères avec des isset et des tests sur tes variables résultats du formulaire dans ta page de traitement.

  16. #16
    Membre expérimenté
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Points : 1 561
    Points
    1 561
    Par défaut
    Citation Envoyé par benoitinfrance
    oki je vois comment faire mais le truc c'est que j'ai une douzaine de critère. donc l'uitilisateur ne va pas s'amuser a faire un choix de ET OU à chaque fois.

    Il te faut construire ta requête dynamiquement suivant les sélections effectuées par les utilisateurs sur tes divers champs, j'avais déjà répondu à 1 ou 2 posts dans le style pour des recherches de biens immobiliers je vais essayer de retrouver ça !

    EDIT : voilà l'exemple typique de ce qu'il faudrait que tu fasses

    http://www.developpez.net/forums/sho...d.php?t=187040

    PS: laisse vraiment tomber le sprintf à relire c'est IMPOSSIBLE

  17. #17
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    oui mais ce qu'il ne veut pas apparamment, c'est un retour "vide"...or avec uniquement des AND entre chaque critère, il y aura des moments où la requête ne renverra rien...
    A benoitinfrance de préciser ce qu'il veut exactement....

  18. #18
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Citation Envoyé par gerald2545
    oui mais ce qu'il ne veut pas apparamment, c'est un retour "vide"...or avec uniquement des AND entre chaque critère, il y aura des moments où la requête ne renverra rien...
    A benoitinfrance de préciser ce qu'il veut exactement....
    bah nan si il construit sa requête comme il faut et si aucun critère n'est saisi il aura un SELECT * FROM table c'est tout donc tout les enregistrements (si c'était par rapport à ma réponse précédente...).

  19. #19
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    je disais ça par rapport aux premiers posts de benoitinfrance sur ce thread, où il disait
    soit ma requete ne me retourne aucun enregistrement (que des AND) soit elle me retourne tous enrgistrement (que des OR).
    On est tous d'accord pour n'utiliser que des "AND" entre les critères, si au moins 1 critère est sélectionné....
    moi j'ai interprété le besoin de benoitinfrance comme : je veux que a requête génère toujours des résultats (pertinent bien sûr).
    Donc si on crée une requête dynamique suivant les choix de l'utilisateur (admettons qu'il utilise les 12 critères à sa disposition), il y a de fortes chances que la requête créée ne renvoie aucun enregistrement....

    Edit : aprtès relecture ma citation n'est pas pertinente et j'ai peut-être mal interprété le besoin...

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 78
    Points : 28
    Points
    28
    Par défaut
    pour le sprintf, il est vrai que j'avais déjà eu le conseil mais étant donné que ca marchait comme ca je ne voyais pas l'intéret de changer. maintenant sous la pression générale j'ai fais la modification.

    en ce qui concerne le retour de ma requete je suis d'accord avec JWhite quand il dit que si rien est sélectionner, je veux tous les enregistrements.

    Par contre pour ton algo JWhite, je n'est pas tout saisi, pourrais tu m'expliquer un peu lus en détail:
    $req = "SELECT * FROM table WHERE 1=1"
    TANT QUE conditions FAIRE
    $req .= " AND condition=valeur"
    FIN TANT QUE

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. [SQL] Un select un peu chaud
    Par KamiRaiden dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 14/03/2008, 14h53
  2. Pb SQL Requete selection
    Par flagfight dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 18/05/2006, 16h40
  3. [SQL] requete select max
    Par kabikou dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 19/10/2005, 16h18
  4. [SQL] requetes inbriquées un peu plus complexe.
    Par Devil666 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/05/2005, 11h06
  5. SQL server 7.0 requete select
    Par sangokus dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 10/03/2004, 11h09

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