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 :

associer un champs Mysql [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 10
    Par défaut associer un champs Mysql
    Bonjour à tous,

    D'habitude je préfère trouver tout seul mais la je cale vraiment d'où mon poste

    J'utilise Mysqlserver 5.0.22.
    J'ai une table qui ressemble a ceci.
    Num,Date,heure,Prix
    183,1995-01-13,10:47:36,400
    183,1995-01-13,11:45:12,450
    183,1995-01-13,16:45:53,412
    ......

    Je cherche a mettre sur une seule ligne le num,date,heure min de la journée, heure max de la journée, prix de l'heure min et prix de l'heure max.
    Par exemple:
    183,1995-01-03,10:47:36,16:45:53,400,412.
    Pour l'heure min et max pas de problème, je cale par contre pour le prix de l'heure min et le prix de l'heure max.

    Des idées?
    Merci Beaucoup.

  2. #2
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    Bonjour,

    Je ne comprend pas trop ou se situe le souci que tu rencontres ?

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Par défaut
    essai un truc de ce genre
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select num,Date, (select min(heure) from maTable ) as HMin, (select max(heure) from maTable ) as HMax
    from matable

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 10
    Par défaut
    Je n'arrive pas a formuler ma requete pour arriver au résultat suivant:
    183,1995-01-13,10:47:36,16:45:53,400,412.

    J'ai essayé différentes requêtes mais cela ne donne pas le résultat escompté.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Par défaut
    Citation Envoyé par frottman1976 Voir le message
    Je n'arrive pas a formuler ma requete pour arriver au résultat suivant:
    183,1995-01-13,10:47:36,16:45:53,400,412.

    J'ai essayé différentes requêtes mais cela ne donne pas le résultat escompté.
    jette un coup d'oeil a mon précédent post

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 10
    Par défaut
    Merci Ouatmad mais ca ne marche pas.
    En ce qui concerne l'heure min et max j'ai réussi.
    J'ai essayé un truc comme ça pour le prix de l'heure début et le prix de l'heure fin mais je pense que c'est n'importe quoi

    select *,Min(heurejour) as heuredebut,max(heurejour) as heurefin,prix=Min(heurejour) as prix1,prix=Max(heurejour) as prix2 from bdm2d2test
    group by datejour;

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Par défaut
    ça dit koi comme erreur?

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 10
    Par défaut
    en fait ca ne me donne pas d'erreur mais ca me donne l'heure min et max de toute la table.
    183,1995-01-03,10:00:00,17:00:21
    183,1995-01-04,10:00:00,17:00:21
    183,1995-01-05,10:00:00,17:00:21
    183,1995-01-06,10:00:00,17:00:21
    ....


    Ce n'est pas tant l'heure qui m'embête puisque ca je sais le faire (cf mon précédent post) c'est surtout d'afficher le prix correspondant pour l'heure min et max.

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Par défaut
    peux tu passer la structure de ta table et la requete que t'utilise actuellement (au cas ou ça n'est pas ce qui figure dans ton post)?

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 10
    Par défaut
    Voici la structure de ma table (enfin un exemple)

    num,datejour,heurejour,prix
    183,1995-01-13,10:47:36,400
    183,1995-01-13,11:45:12,450
    183,1995-01-13,16:45:53,412
    183,1995-01-14,12:47:36,410
    183,1995-01-14,13:45:12,480
    183,1995-01-14,17:45:53,402
    .......
    Je cherche a mettre sur une seule ligne le num,datejour,heure min de la journée, heure max de la journée, prix de l'heure min et prix de l'heure max.

    Par exemple:
    num,DateJour,HeureMinJour,HeureMaxJour,PrixdeHeureMinJour,PrixdeHeureMaxJour
    183,1995-01-13,10:47:36,16:45:53,400,412
    183,1995-01-14,12:47:36,17:45:53,410,402

    'ai essayé un truc comme ça :

    select *,Min(heurejour) as heureminjour,max(heurejour) as heuremaxjour,prix=Min(heurejour) as PrixdeHeureMinJour,prix=Max(heurejour) as PrixdeHeureMaxJour from bdm2d2test
    group by datejour;

    Et evidemment ca ne marche pas, sauf pour l'heureminjour et l'heuremaxjour.

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Par défaut
    j'ai monter une table semblable à la tienne et j'ai effectué cette requete dessus

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    SELECT mdate AS ldate, Min( heure ) AS heureminjour, max( heure ) AS heuremaxjour, (
     
    SELECT prix
    FROM matable
    WHERE heure = (
    SELECT Min( heure )
    FROM matable
    GROUP BY mdate
    HAVING mdate = ldate )
    ) AS PrixMin, (
     
    SELECT prix
    FROM matable
    WHERE heure = (
    SELECT Max( heure )
    FROM matable
    GROUP BY mdate
    HAVING mdate = ldate )
    ) AS PrixMax
    FROM matable
    GROUP BY mdate;

    cette requete marche à condition que les sous requete qu'elle contient renvoie un et un resultat. Par exemple au cas ou dans une journée, il y'aurait plusieurs heure min chacune ayant son prix, la requete risque de planter.
    Donc a toi de voir dans ce genre de figure, quelle marche adoptée (choisir le min des heures min ou .....) .......... respectivement pour les heures max

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 10
    Par défaut
    Merci Ouatmad,

    J'ai testé et en effet cela me marque un message d"erreur:
    SQL ERROR: Subquery returns more than 1 row

    J'ai comme tu le dis dans une journée plusieurs prix correspondant a plusieurs heures.

  13. #13
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Par défaut
    Citation Envoyé par frottman1976 Voir le message
    Merci Ouatmad,

    J'ai testé et en effet cela me marque un message d"erreur:
    SQL ERROR: Subquery returns more than 1 row

    J'ai comme tu le dis dans une journée plusieurs prix correspondant a plusieurs heures.
    je connais pas tes règles de gestion. Mais une manière de circonscrire le pbm est de:
    • si ya plusieurs heure min dans une journée, prendre le min (prix) de ces heures min.
    • si ya plusieurs heure max dans une journée, prendre le max (prix) de ces heures max.

    Partant donc de cela, la requete devient

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    SELECT mdate AS ldate, Min( heure ) AS heureminjour, max( heure ) AS heuremaxjour, (
     
    SELECT min(prix)
    FROM matable
    WHERE heure = (
    SELECT Min( heure )
    FROM matable
    GROUP BY mdate
    HAVING mdate = ldate )
    ) AS PrixMin, (
     
    SELECT max(prix)
    FROM matable
    WHERE heure = (
    SELECT Max( heure )
    FROM matable
    GROUP BY mdate
    HAVING mdate = ldate )
    ) AS PrixMax
    FROM matable
    GROUP BY mdate;
    ..... et on c'est propre

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 10
    Par défaut
    Je suis entrain de tester (c'est une grosse table)

    En attendant je t'édite quelques règles de gestion pour ma table:

    Ma table recense des données financières (des transactions boursières).
    Elle est composée de plusieurs num (dans mon exemple 183)
    Chaque num comporte plusieurs dates de jours
    Chaque date de jour peut comporter plusieurs transactions (heurejour).
    Par contre pour chaque transaction, un prix seul est défini.

    D'ou mon exemple:

    num,datejour,heurejour,prix
    183,1995-01-13,10:47:36,400
    183,1995-01-13,11:45:12,450
    183,1995-01-13,16:45:53,412
    183,1995-01-14,12:47:36,410
    183,1995-01-14,13:45:12,480
    183,1995-01-14,17:45:53,402

    J'espere que tu y vois un peu plus clair.

  15. #15
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Par défaut
    oui je comprend ce que tu dis! mais le problème reste poser. Du fait que plusieurs transactions de la meme journée qui ont la meme heure min avec des prix différent, il faut savoir quel prix affiché: le min, le max ou min la moyenne ?
    En somme c'est a toi de trancher

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 10
    Par défaut
    Je reprends mon exemple pour la journée 1995-01-13.
    Donc dans ma table j'ai:
    183,1995-01-13,10:47:36,400
    183,1995-01-13,11:45:12,450
    183,1995-01-13,16:45:53,412

    L'heure min pour ma journée du 1995-01-13 est 10:47:36, par conséquent c'est le prix correspondant que je veux récupérer donc 400.
    La même chose pour l'heure max 16:45:53, je voudrais récupérer le prix correspondant 412.

    Donc ma ligne de résultat doit donner:
    183,1995-01-13,10:47:36,16:45:53,400,412

  17. #17
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Par défaut
    que fais tu dans une configuration de ce genre

    183,1995-01-13,10:47:36,400
    183,1995-01-13,11:45:12,450
    183,1995-01-13,10:47:36,300
    183,1995-01-13,16:45:53,412
    183,1995-01-13,16:45:53,420

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 10
    Par défaut
    Il ne peut y avoir qu'une seule transaction a l'instant T.
    Donc pas de doublon au niveau des heures.

  19. #19
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Par défaut
    dans ce cas, la requete que je t'ai envoyé tantot devrait marcher sans problème (dans la mesure ou les sub query renverront toujours un et un seul resultat)

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    SELECT mdate AS ldate, Min( heure ) AS heureminjour, max( heure ) AS heuremaxjour, (
     
    SELECT prix
    FROM matable
    WHERE heure = (
    SELECT Min( heure )
    FROM matable
    GROUP BY mdate
    HAVING mdate = ldate )
    ) AS PrixMin, (
     
    SELECT prix
    FROM matable
    WHERE heure = (
    SELECT Max( heure )
    FROM matable
    GROUP BY mdate
    HAVING mdate = ldate )
    ) AS PrixMax
    FROM matable
    GROUP BY mdate;

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

Discussions similaires

  1. [C#] Associer 2 champs à un DataTextField
    Par tidou dans le forum ASP.NET
    Réponses: 3
    Dernier message: 13/03/2009, 17h53
  2. incrémenter un champ mysql
    Par pas30 dans le forum Outils
    Réponses: 3
    Dernier message: 25/01/2007, 17h53
  3. dbmemo type de champ mysql
    Par Mihalis dans le forum Bases de données
    Réponses: 1
    Dernier message: 21/01/2007, 18h30
  4. insérer un tableau dans un champs MySQL
    Par jbaudin dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 29/03/2006, 09h08
  5. problème de timestamp dans champ MySQL
    Par Torpedox dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 04/12/2005, 09h59

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