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 :

Problème de requête après une première requête


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 42
    Par défaut Problème de requête après une première requête
    Hello!!
    Alors voila depuis 2 jours je bloque je fais donc appel a vous ^^

    J'ai une base de données regroupant des clients une pour les infos de la personnes l'autre pour son habitation. Les tables sont reliés entre elles via le champs id_adresse.
    Dans les données sur la personne j'ai 3 champs regroupant la date d’anniversaire de la personne (jour, mois et années). Je doit effectuer différentes requêtes afin de filtrer les clients et de n'afficher que ceux qui correspondent aux critères demandés dans un tableau j'ai donc fait mes requêtes en forme de conditions imbriqués et jusque la aucun soucis. Mais par la suite dans mon while j'ai calculer l'age qui s'affiche également parfaitement. Mais le gros problème c'est que j'ai des conditions sur l'age, l'age n'apparaissant qu'a partir de mon While je n'arrive pas a exécuter les bonne requête et je suis un peu perdu.
    Le projet n'avance plus, je continue de chercher et j’espère que vous pourrais m'aider ^^

  2. #2
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    Salut,

    Je te conseil d'utiliser un champ Date pour la date de naissance, car la ca va pas être possible de filtrer sur l'age si le jour, le mois, et l'année sont stockés dans des champs séparés.

    A la limite tu peut t'en sortir avec des trucs du style "WHERE anneeNaissance <= '" . (date('Y') - $ageRequis) . "'" pour sélectionner les clients en fonction de l'âge mais ca ne prendra pas en compte le jour et le mois, enfin bref je pense qu'il vaut mieux que tu repense un peu la base de données, quitte à refaire une partie de ton code, plutôt que de bidouiller et de te prendre la tête pour un code qui sera bancal.

    Et si ta table client comporte déjà pas mal d'enregistrement, tu peut faire un petit script de migration pour mettre à jour ton nouveau champs date de naissance

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 42
    Par défaut
    Je voudrais bien pouvoir modifier la table mais je ne peux pas =( en fait je suis en stage dans une entreprise et je dois améliorer un site alors j'ai pas trop le choix au niveau de la base =(

  4. #4
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    Et simplement ajouter un champ dans le base sans toucher aux champs existant t'a pas le droit ?
    Sinon tu doit faire quoi exactement au niveau de l'âge ?
    A la limite si c'est simplement une recherche par rapport à l'âge tu peut exclure les résultats qui ne correspondent pas au bon âge dans ton while, un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if ($ageRequis != $ageClient) { 
      continue;
    } else {
      $listeResultats[] = $idClient;
    }
    Bon c'est pas propre du tout étant donné qu'il va récupérer une grosse liste de résultats inutilement, mais bon je crois que t'a pas trop le choix si tu peut pas toucher à la structure de la base

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 42
    Par défaut
    En fait le projet c'est la génération d'impression de documents en fonction des critères de sélection, donc dans les résultats du tableau je dois absolument afficher l'age a partir d'un calcul que j’exécute dans mon while, mais au niveau des critères de sélection j'ai age minimum et age maximum or je ne vois pas comment faire des recherche dessus avant le calcul de l'age (impossible je suppose) mais la je pensée passer par l’année de naissance, puisque j'ai la donnée dans la table je calcul l’année mini et l’année maxi et je base ma recherche sur cette condition (possible ça non? ^^)

  6. #6
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    Oui dans ce cas fait un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $req .= 'WHERE annee_naissance BETWEEN "' . (date('Y') - $ageMax) . '" AND "' . (date('Y') - $ageMin) . '"';
    Mais pour avoir un truc précis par rapport au jour et mois de naissance, tu peut ajouter le traitement que j'avais mis dans mon message précédent.

  7. #7
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Je voudrais bien pouvoir modifier la table mais je ne peux pas =( en fait je suis en stage dans une entreprise et je dois améliorer un site alors j'ai pas trop le choix au niveau de la base =(
    Comment ça tu ne peux pas ?

    Si tu fais des requêtes telles que des UPDATE ou des INSERT normalement tu dois pourvoir le faire (bon, faudra pouvoir créer un nouveau champ, et supprimer les 3 anciens quand même, mais ça reste quand des requêtes SQL).

    Ce ne serait pas plutôt qu'on t'interdise de le faire ?
    Dans ce cas n'y a t-il pas moyen de rencontrer la personne en question et lui expliquer que sa Bdd à ce niveau là est mal conçue, car c'est une erreur de faire ça en 3 champs alors que c'est un type DATE, soit 1 champ.

    Le problème c'est tout ce que tu feras sur cette donnée sera tordue.
    Quel intérêt il y t-il de faire un stage dans le développement si ce qu'on va faire va être tordu ?
    Modifier cette partie là n'est il pas une amélioration ?


    Enfin, je dis ça ... mais j'ai rien dis.

  8. #8
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Comment ça tu ne peux pas ?

    Si tu fais des requêtes telles que des UPDATE ou des INSERT normalement tu dois pourvoir le faire (bon, faudra pouvoir créer un nouveau champ, et supprimer les 3 anciens quand même, mais ça reste quand des requêtes SQL).

    Ce ne serait pas plutôt qu'on t'interdise de le faire ?
    Dans ce cas n'y a t-il pas moyen de rencontrer la personne en question et lui expliquer que sa Bdd à ce niveau là est mal conçue, car c'est une erreur de faire ça en 3 champs alors que c'est un type DATE, soit 1 champ.

    Le problème c'est tout ce que tu feras sur cette donnée sera tordue.
    Quel intérêt il y t-il de faire un stage dans le développement si ce qu'on va faire va être tordu ?
    Modifier cette partie là n'est il pas une amélioration ?


    Enfin, je dis ça ... mais j'ai rien dis.

    Ah oui moi j'avais compris qu'on lui interdisait de toucher à la base, mais si c'est qu'une question de droit d'accès à la base de données, c'est sur qu'un ALTER TABLE marche aussi bien dans un mysql_query que dans phpMyAdmin

  9. #9
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 42
    Par défaut
    Bah je suis en lien direct avec celui qui a fais la base si je lui dit "mon développement est tordu parce que votre base de 72 tables est tordu et en plus les 3 seules tables que j'utilise sont mal foutu...." je sais pas pourquoi mais je le sent mal ^^
    Au début en analysant la base j'ai demander si je pouvais modifier mais vu sa tête a ce moment je touche pas ><' et en plus toutes les pages déjà créé se base dessus et vu le code avant je préfère pas y mettre mon nez j'y perd mon PHP ^^

    Oui j'ai vu le traitement précédent je vais tenter les 2 solutions a voir maintenant ce qui sera le plus correct ^^ Merciii

  10. #10
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    Citation Envoyé par rockncaly Voir le message
    Bah je suis en lien direct avec celui qui a fais la base si je lui dit "mon développement est tordu parce que votre base de 72 tables est tordu et en plus les 3 seules tables que j'utilise sont mal foutu...." je sais pas pourquoi mais je le sent mal ^^
    Au début en analysant la base j'ai demander si je pouvais modifier mais vu sa tête a ce moment je touche pas ><' et en plus toutes les pages déjà créé se base dessus et vu le code avant je préfère pas y mettre mon nez j'y perd mon PHP ^^

    Oui j'ai vu le traitement précédent je vais tenter les 2 solutions a voir maintenant ce qui sera le plus correct ^^ Merciii
    Ouais enfin tu peut le dire de façon un peu plus diplomate
    Un truc du style "Je pense que le code serait plus optimisé si on ajoutait un champs date pour la date de naissance", et si tu garde les 3 anciens champs le reste du code sera toujours fonctionnel

  11. #11
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Citation Envoyé par amoiraud
    Ah oui moi j'avais compris qu'on lui interdisait de toucher à la base ...
    D'accord (encore que, on en a pas la certitude), mais à condition qu'on lui donne un bon outil.

    Si l'outil est à la base est tordu, je ne vois pas le coté bénéfique du stage, car c'est un stage justement, pas un travail.
    Donc le minimum c'est que le stagiaire apprenne à faire du code correcte, non ?

  12. #12
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 42
    Par défaut
    J'ai déjà tenté, j'ai soumis un autre schéma relationnelle mais pas moyen c'est parti direct poubelle donc bon pas moyen ^^

  13. #13
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    D'accord, mais à condition qu'on lui donne un bon outil.

    Si l'outil est à la base est tordu, je ne vois pas le coté bénéfique du stage, car c'est un stage justement, pas un travail.
    Donc le minimum c'est que le stagiaire apprenne à faire du code correcte, non ?
    Tout à fait d'accord, mais malheureusement beaucoup de boites considèrent les stagiaires comme de la main d’œuvre gratuite et ne se préoccupent pas de ce que ca apportera au stagiaire...

  14. #14
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    Citation Envoyé par rockncaly Voir le message
    J'ai déjà tenté, j'ai soumis un autre schéma relationnelle mais pas moyen c'est parti direct poubelle donc bon pas moyen ^^
    OK ba si vraiment il ne veulent rien savoir fait comme on a dit, par contre signal bien dans ton rapport de stage que tu à émis des réserves sur la structure de la base mais qu'on ne t'a pas écouté et que tu à du faire avec les moyens du bord, tu peut également mettre le schéma relationnel en annexe pour montrer que tu à proposé des solutions

  15. #15
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 42
    Par défaut
    D'accord merciii =)

  16. #16
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Tout à fait d'accord, mais malheureusement beaucoup de boites considèrent les stagiaires comme de la main d’œuvre gratuite et ne se préoccupent pas de ce que ca apportera au stagiaire...
    Je le sais bien, mais ça arrive quand même d'avoir affaire à de gens intelligents, et qui comprennent que ce sera bénéfique à l'entreprise que de réparer cette partie là plutôt que d’enfoncer le clou un peu plus.

    Citation Envoyé par rockncaly Voir le message
    J'ai déjà tenté, j'ai soumis un autre schéma relationnelle mais pas moyen c'est parti direct poubelle donc bon pas moyen ^^
    On marche sur la tête.


    Bon, et bien tu peux dire à ton tuteur que c'est un imbéc***
    Si si, et haut et fort même.


    La solution d'Amoiraud est une bonne piste à mon sens.

  17. #17
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 42
    Par défaut
    Oh non en même temps tout le site est structurer sur ce modèle ça peut se comprendre ^^

    En attendant j'ai résolu mon problème =)
    Au final requête en utilisant les années =)

    Bonne journée et encore merci =)

  18. #18
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    On peut reconstituer dynamiquement une vraie date en SQL à partir des 3 champs jour, mois, avec une fonction qui s'appelle généralement TO_DATE(). Le nom exact et la forme des arguments dépendent du SGBD. C'est pareil pour calculer l'âge au jour près.

    Donc le fait de ne pas avoir de champ de type date n'est effectivement pas une bonne idée mais ce n'est pas pour autant un problème bloquant pour un filtrage en SQL.

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

Discussions similaires

  1. Une seconde requête si la première ne donne rien
    Par Kaori dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/07/2011, 17h12
  2. Réutilisation d'un Statement après la première requète
    Par JeanNoel53 dans le forum InterBase
    Réponses: 6
    Dernier message: 15/06/2010, 21h26
  3. Réponses: 4
    Dernier message: 25/02/2009, 15h22
  4. Réponses: 3
    Dernier message: 19/05/2008, 11h36
  5. Réponses: 2
    Dernier message: 10/02/2006, 15h46

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