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 tri pour une application [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 21
    Points : 6
    Points
    6
    Par défaut Problème de tri pour une application
    Bonsoir a tous,
    Je suis sur la fin d'un programme informatique ou je suis confronte a un probleme de tri,
    Voici mon probleme dans php/my admin j'ai pres d'un millier d'heures qui ont ete inserees avec un fichier texte, mes heures sont notees en AM et PM.
    Toutes ces heures correspondent a l'heure de debut d'un spectacle et sont proposees dans un menu deroulant dans un formulaire pour les futurs utilisateurs du programme(je tiens a preciser que ce menu n'est pas long une fois les doublons supprimes).
    Je voudrais pouvoir trier correctement ce menu deroulant l'ennui c'est que je n'arrive pas a ecrire:"Trie moi d'abord les heures avec des AM puis les heures avec les PM et met le tout dans un menu deroulant"
    Voici ma requete qui pour le moment qui ne tri que les AM par ordre croissant:
    $q = "SELECT * FROM performance WHERE Start LIKE '%AM' ORDER BY Start ";

    Start :etant l'heure de debut du spectacle.

    Un grand merci a tous ceux qui se donnent la peine de lire ce message.

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut !

    Je pense que le problème vient de la façon dont tu stockes ton heure, je suppose que tu les sotckes sous forme de chaînes ?
    dans ce cas, il te faudrait plutôt utiliser le type TIME de MySQL
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $q = "SELECT * FROM performance WHERE Start LIKE '%AM' ORDER BY Start UNION SELECT * FROM performance WHERE Start LIKE '%PM' ORDER BY Start ";
    ?
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 21
    Points : 6
    Points
    6
    Par défaut Ces solutions ne marchent malheureusement pas
    Je viens d'utiliser ce code mais malheureusement cela ne m'affiche plus rien dans mon menu.Auriez vous une autre idee?(et pourtant j'y est cru en voyant ce code)
    $q = "SELECT * FROM performance WHERE Start LIKE '%AM' ORDER BY Start UNION SELECT * FROM performance WHERE Start LIKE '%PM' ORDER BY Start ";

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 21
    Points : 6
    Points
    6
    Par défaut Passer en TIME ne marche pas
    J'ai aussi etudie la reponse de Swoög l'ennui c'est que quand j'insere ma base de donnees(ou les heures sont en AM et PM et je voudrais les gardees)dans phpmyadmin et que je les declare en TIME il ne me fait pas la difference entre les AM et PM resultat par defaut mes PM deviennent des AM et aucune heure du coup ne depasse 12:59.
    Pouvez vous m'aider a resoudre ce soucis s'il vous plait?

  6. #6
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    il faudrait que tu transforme d'abord tes dates avant de les passer ensuite en TIME...

    normalement, le type de donnée n'a aucun lien avec la présentation, c'est dans la requête (SELECT) que tu indiques la présentation que tu veux pour tes données... (avec DATE_FORMAT par exemple) sinon elles ne sont pas triables
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  7. #7
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 21
    Points : 6
    Points
    6
    Par défaut Comment se servir de TIME_FORMAT
    J'ai bien reussi a convertir toutes mes heures AM et PM en systeme de 24 heures,l'ennui c'est que mes utilisateurs sont americains ils faut donc qu'ils voient les heures sur un systemes de 12 heures,je me suis documente sur la fonction TIME_FORMAT(qui existe) mais je n'arrive pas a m'en servir car je n'ai pas suffisement de connaissances en php et je dois rendre ce projet dans quelques jours et du coup n'est pas le temps d'apprendre, j'ai esseye en vain une requete :
    $q = "SELECT time_format(string,%r)* FROM temps ";
    mais elle ne marche pas, tout ce que je veux pouvoir faire c'est juste transformer mes heures situees dans le champ "start" de ma table temps qui sont en 24 heures en systeme americain de 12 heures.
    Je remercie d'avance tout ceux qui voudraont bien repondre a ce message

  8. #8
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TIME_FORMAT(start, '%r') AS start_12, * ...
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TIME_FORMAT(start, '%h:%i %p') AS start_12, * ...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  9. #9
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 21
    Points : 6
    Points
    6
    Par défaut J'ai esseaye une fois de plus mais sans succes
    Je crois que le probleme est ailleurs cependant,je tiens a preciser que j'ai appris le php par experience et non par des cours ou des lecons,il m'annonce un argument non valide pour la ligne en rouge ,ce que je ne comprend pas c'est que j'arrive a faire afficher toutes mes heures si je ne met pas TIME_FORMAT(start, '%r') AS start_12, malheureusement je n'ai pas le temps de suivre des cours,ma base de donnees est tout ce qu'il y a de plus simple il n'y a qu'une table qui s'appelle "time" et un champ "Start"a l'interieur qui est definit en format TIME:
    <?php
    include ("mysql.php");
    ?>
    <?
    $q = "SELECT TIME_FORMAT(start, '%r') AS start_12, * FROM time ";
    $r = mysql_query($q);
    while ($row=mysql_fetch_array($r)){
    $start = $row[Start];
    print "$start</td>";
    }

    ?>
    Mon programme ne fait que cela pour le moment tout ce que je veux c'est pouvoir afficher mes heures qui sont en systeme de 24h en systeme de 12h.
    Dans tout les cas merci pour le temps que vous m'avez deja consacre

  10. #10
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    avec le TIME_FORMAT et le AS start_12, il ne faut plus référencer ta colonne avec 'Start', mais avec 'start_12' pour avoir le format 12h...

    PS :
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  11. #11
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 21
    Points : 6
    Points
    6
    Par défaut Excuse moi mais je n'y arrive toujours pas
    J'ai change $row[Start] par $row[start_12] et ca me met toujours la meme erreur voici mon code(ou je n'ai change que la partie en rouge):
    <?
    $q = "SELECT TIME_FORMAT(start, '%r') AS start_12, * FROM time ";
    $r = mysql_query($q);
    while ($row=mysql_fetch_array($r)){
    $start = $row[start_12];
    print "$start</td>";
    }

    ?>
    courage on y est presque

  12. #12
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    !!!!!!
    quel est ton message d'erreur ?
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  13. #13
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Voici mon message d'erreur :

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in

    Desole je viens juste de voir comment on utilisait la balise code...promis je la mettrais a l'avenir

  14. #14
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    remplace la ligne par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $r = mysql_query($q) or die(mysql_error());
    PS : dans TIME_FORMAT, si le nom de ton champ est Start (avec une majuscule), il faut le mettre également avec une majuscule
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  15. #15
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Voici mon message d'erreur :
    "Erreur de syntaxe près de '* FROM time' à la ligne 1"

    Voici mon code (ou j'ai juste change start par Start):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?
    $q = "SELECT TIME_FORMAT(Start, '%r') AS start_12,  * FROM time ";
    $r = mysql_query($q) or die(mysql_error());
    while ($row=mysql_fetch_array($r)){
        $start = $row[start_12];
        print "$start</td>";
        }
    
    ?>
    J'ai utilise les balises de code,est ce comme cela que tu voulais que je m'en serve?

  16. #16
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par nanor21
    J'ai utilise les balises de code,est ce comme cela que tu voulais que je m'en serve?
    parfaitement, ça rend le code beaucoup plus lisible, merci...

    bon, essaie de faire time.* au lieu de *...
    sinon spécifie simplement la liste des colonnes de la table dont tu as besoin (chaque nom de colonne séparés par des virgules) à l'exception de Start (déjà spécifié avec le TIME_FORMAT)
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  17. #17
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 21
    Points : 6
    Points
    6
    Par défaut C'est bon ca marche
    il fallait remplacer comme tu le disais par "time.*"
    Merci beaucoup tu me sauves.
    Juste une derniere chose comment modifier l'heure car du coup j'ai quelque chose du type : 00:00:00 et en fait les deux derniers 00 je voudrais m'en passer?

  18. #18
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par nanor21
    il fallait remplacer comme tu le disais par "time.*"
    Merci beaucoup tu me sauves.
    de rien
    Citation Envoyé par nanor21
    Juste une derniere chose comment modifier l'heure car du coup j'ai quelque chose du type : 00:00:00 et en fait les deux derniers 00 je voudrais m'en passer?
    utilise la seconde syntaxe de TIME_FORMAT que je t'ai proposé : au lieu de
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  19. #19
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Impeccable ca marche avec '%h:%i %p' et ca me donne le format que je veux,merci
    L'ennui c'est qu'en fait ces informations je les met dans un menu deroulant et je m'en sers pour afficher un tableau.
    - Donc pour le menu deroulant pas de probleme les informations s'affichent normalement.
    - Pour me servir de ces informations pour aller chercher les donnees dans la base de donnees pas de probleme non plus.
    - Le probleme c'est que les heures qui s'affichent dans mon tableau issu de la base de donnees sont en systeme de 24h et je voudrais qu'elles soit en 12.
    Apres les solutions que tu m'as apporte je me doute bien ou il faut changer la syntaxe, l'ennui c'est que mon code est assez complique a ce niveau(car ce n'est pas moi qui l'est tape)j'ai mis en rouge tous les passages ou intervient la table performance et $start:
    Code : 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    $q = 'SELECT pr.*,
    pf.*,
    pl.*
    FROM performer AS pr
    INNER JOIN performance AS pf ON pr.IDPerf=pf.IDPerf
    INNER JOIN place AS pl ON pl.CodeStage=pf.CodeStage '.$where;
    echo $_POST['perfname'];
    echo $q;
    
    $r = mysql_query($q);
    while ($row=mysql_fetch_array($r)){
        $idperf = $row[IDPerf];
        $perfname = $row[PerfName];
        $typeperf = $row[TypePerf];
        $perfcodename = $row[PerfCodeName];
        $tagline = $row[Tagline];
        $idperformance = $row[IDPerformance];
        $date = $row[Date];
        $start = $row[Start];
        $end = $row[End];
        $codestage = $row[CodeStage];
        $stage = $row[Stage];
        $locstage = $row[LocStage];
        echo "<tr>";
        /* Affichage du contenu de performer */
        print "<td>$perfname</td>\n";
        print "<td>$typeperf</td>\n";
        print "<td>$perfcodename</td>\n";
        print "<td>$tagline</td>\n";
        /* Affichage du contenu de performance */
        print "<td>$date</td>\n";
        print "<td>$start</td>\n";
        print "<td>$end</td>\n";
        /* Affichage du contenu de stage */
        echo "<td>$stage</td>\n";
        echo "<td>$locstage</td>\n";
        echo "</tr>";
    }
    ?>
    S'il te plait,peux tu m'aider une derniere fois sur ce probleme?

  20. #20
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    il te suffit de faire pareil :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TIME_FORMAT(pf.Start, '%h:%i %p') AS start_12
    et tu accèdes au champ avec start_12 et ce à chaque fois que tu as besoin de ce champ dans ce format là
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

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

Discussions similaires

  1. Problème d'accès à distance pour une application sous JBoss
    Par El Saigneur dans le forum Wildfly/JBoss
    Réponses: 4
    Dernier message: 05/06/2010, 17h22
  2. Réponses: 0
    Dernier message: 21/04/2009, 12h53
  3. Problème de conception pour une application d "Audit"
    Par Jcdas dans le forum Modélisation
    Réponses: 3
    Dernier message: 05/11/2008, 20h13
  4. Réponses: 3
    Dernier message: 15/06/2007, 18h14
  5. Problème de filtre pour une application struts.
    Par mazizou dans le forum Struts 1
    Réponses: 5
    Dernier message: 31/03/2007, 15h54

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