Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/01/2012, 09h44   #1
Invité régulier
 
Femme Claire
Étudiant
Inscription : janvier 2012
Messages : 33
Détails du profil
Informations personnelles :
Nom : Femme Claire
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 33
Points : 7
Points : 7
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 ^^
rockncaly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 09h50   #2
Membre expérimenté
 
Avatar de amoiraud
 
Homme Adrien
Développeur Web
Inscription : octobre 2006
Messages : 412
Détails du profil
Informations personnelles :
Nom : Homme Adrien
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 : 412
Points : 537
Points : 537
Envoyer un message via MSN à amoiraud
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
amoiraud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 09h53   #3
Invité régulier
 
Femme Claire
Étudiant
Inscription : janvier 2012
Messages : 33
Détails du profil
Informations personnelles :
Nom : Femme Claire
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 33
Points : 7
Points : 7
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 =(
rockncaly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 10h08   #4
Membre expérimenté
 
Avatar de amoiraud
 
Homme Adrien
Développeur Web
Inscription : octobre 2006
Messages : 412
Détails du profil
Informations personnelles :
Nom : Homme Adrien
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 : 412
Points : 537
Points : 537
Envoyer un message via MSN à amoiraud
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 :
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
amoiraud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 10h13   #5
Invité régulier
 
Femme Claire
Étudiant
Inscription : janvier 2012
Messages : 33
Détails du profil
Informations personnelles :
Nom : Femme Claire
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 33
Points : 7
Points : 7
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? ^^)
rockncaly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 10h18   #6
Membre expérimenté
 
Avatar de amoiraud
 
Homme Adrien
Développeur Web
Inscription : octobre 2006
Messages : 412
Détails du profil
Informations personnelles :
Nom : Homme Adrien
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 : 412
Points : 537
Points : 537
Envoyer un message via MSN à amoiraud
Oui dans ce cas fait un :

Code :
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.
amoiraud est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/01/2012, 10h18   #7
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 727
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 727
Points : 3 294
Points : 3 294
Citation:
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.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 10h21   #8
Membre expérimenté
 
Avatar de amoiraud
 
Homme Adrien
Développeur Web
Inscription : octobre 2006
Messages : 412
Détails du profil
Informations personnelles :
Nom : Homme Adrien
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 : 412
Points : 537
Points : 537
Envoyer un message via MSN à amoiraud
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
amoiraud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 10h25   #9
Invité régulier
 
Femme Claire
Étudiant
Inscription : janvier 2012
Messages : 33
Détails du profil
Informations personnelles :
Nom : Femme Claire
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 33
Points : 7
Points : 7
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
rockncaly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 10h29   #10
Membre expérimenté
 
Avatar de amoiraud
 
Homme Adrien
Développeur Web
Inscription : octobre 2006
Messages : 412
Détails du profil
Informations personnelles :
Nom : Homme Adrien
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 : 412
Points : 537
Points : 537
Envoyer un message via MSN à amoiraud
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
amoiraud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 10h29   #11
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 727
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 727
Points : 3 294
Points : 3 294
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 ?
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 10h32   #12
Invité régulier
 
Femme Claire
Étudiant
Inscription : janvier 2012
Messages : 33
Détails du profil
Informations personnelles :
Nom : Femme Claire
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 33
Points : 7
Points : 7
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 ^^
rockncaly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 10h32   #13
Membre expérimenté
 
Avatar de amoiraud
 
Homme Adrien
Développeur Web
Inscription : octobre 2006
Messages : 412
Détails du profil
Informations personnelles :
Nom : Homme Adrien
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 : 412
Points : 537
Points : 537
Envoyer un message via MSN à amoiraud
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...
amoiraud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 10h34   #14
Membre expérimenté
 
Avatar de amoiraud
 
Homme Adrien
Développeur Web
Inscription : octobre 2006
Messages : 412
Détails du profil
Informations personnelles :
Nom : Homme Adrien
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 : 412
Points : 537
Points : 537
Envoyer un message via MSN à amoiraud
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
amoiraud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 10h36   #15
Invité régulier
 
Femme Claire
Étudiant
Inscription : janvier 2012
Messages : 33
Détails du profil
Informations personnelles :
Nom : Femme Claire
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 33
Points : 7
Points : 7
D'accord merciii =)
rockncaly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 10h41   #16
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 727
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 727
Points : 3 294
Points : 3 294
Citation:
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.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 10h59   #17
Invité régulier
 
Femme Claire
Étudiant
Inscription : janvier 2012
Messages : 33
Détails du profil
Informations personnelles :
Nom : Femme Claire
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 33
Points : 7
Points : 7
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 =)
rockncaly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 14h26   #18
Modérateur
 
Inscription : octobre 2008
Messages : 1 508
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 508
Points : 2 040
Points : 2 040
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.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h10.


 
 
 
 
Partenaires

Hébergement Web