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

Langage PHP Discussion :

Trier par ordre croissant


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Par défaut Trier par ordre croissant
    Bonjour,
    Voici maintenant quelques heures que je me heurte à un problème...

    Pour commencer voici ma "create table" pour vous donner une idée de la structure:
    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
    CREATE TABLE `annonces` (
      `id` int(10) NOT NULL auto_increment,
      `titre` varchar(255) NOT NULL,
      `prix` varchar(255) NOT NULL,
      `comment` text NOT NULL,
      `photo` varchar(255) NOT NULL,
      `thumbs` text NOT NULL,
      `rubrique` int(1) NOT NULL,
      `lieu` varchar(255) NOT NULL,
      `commentEN` text NOT NULL,
      `titreEN` varchar(255) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
     
    SELECT annonces.id, annonces.titre, annonces.prix, annonces.comment, annonces.photo, annonces.thumbs, annonces.rubrique, annonces.lieu, annonces.commentEN, annonces.titreEN FROM annonces ORDER BY annonces.prix

    Avec cette create, j'avais espérer trier mes annonces par ordre de prix, hors j'ai beau essayer de faire un ORDER BY, rien ne fait, les liste reste toujours dans le désordre, que se soit dans mysql ou sur mon site affichant les données...

    Avez-vous une idée?

    Merci beaucoup !

  2. #2
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    S'il s'agit de prix, pourquoi un VARCHAR() ?
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Par défaut
    Bonjour,
    En faîtes, le code est soumis à toutes propositions de correction... J'ai tant bien que mal appris à gérer un minimum le sql et voici le résultat...
    Varchar, parceque je pensais que cela irais, et il n'y avais pas de NUMBER en proposition...

  4. #4
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Les types de colonnes numériques ne manquent pas :
    MySQL 5.0 Reference Manual :: 11 Types de colonnes :: 11.2 Types numériques
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Est-il bien nécessaire que toutes les colonnes VARCHAR soient d'une longueur maximale de 255 caractères ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Par défaut
    Commences par modifier le type de la colonne prix en FLOAT UNSIGNED
    Ton tri marchera après sans problème.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Par défaut
    Bonjour,
    FLOAT est une bonne piste, mais quand je met ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT annonces.id, annonces.titre, annonces.prix, annonces.comment, annonces.photo, annonces.thumbs, annonces.rubrique, annonces.lieu, annonces.commentEN, annonces.titreEN 
    FROM annonces 
    ORDER BY annonces.prix
    Il le tri, et des que je change d'onglet ou de page il remet le code sql précèdent... Donc je ne peux pas faire de modification dans le sql déjà en place... MYSQL 5-7... J'ai beau essayer sa ne se modifie pas...

    De plus, des que le prix dépasse le millions, et bien il m'affiche ces caractères: 2e+06 au lieu de 2000000...
    C'est parceque j'ai changer en FLOAT UNSIGNED ?

    Je l'ai mit en DECIMAL. Sa ne modifie plus le 2000000 et sa les met dans l'ordre, mais même avec une requête dans le php je ne m'en sort pas... Grrr

  8. #8
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par hitchcoke Voir le message
    Il le trie, et dès que je change d'onglet ou de page il remet le code sql précédent...
    Comment ça changer d'onglet ou de page ?
    Dans ton application qui utilise la BDD ?
    Alors ce n'est pas un problème SQL mais un problème à résoudre dans le code du programme.
    Donc je ne peux pas faire de modification dans le sql déjà en place... MYSQL 5-7... J'ai beau essayer sa ne se modifie pas...
    Essaie d'être un peu plus précis :
    - Qu'est-ce que tu essaies ?
    - Quel est le résultat ?
    - Quels sont les éventuels messages d'erreur ?

    De plus, des que le prix dépasse le millions, et bien il m'affiche ces caractères: 2e+06 au lieu de 2000000...
    C'est parceque j'ai changer en FLOAT UNSIGNED ?
    Ca semble normal si j'en crois la doc MySQL

    Je l'ai mit en DECIMAL. Sa ne modifie plus le 2000000
    C'est normal, DECIMAL est en fait un type CHAR. Par contre, je pense que ça entraîne une conversion implicite lors des calculs et ça doit nuire aux performances.

    même avec une requête dans le php je ne m'en sort pas...
    Donne ton code php, on redirigera sur le forum adéquat si nécessaire.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Par défaut
    Comment ça changer d'onglet ou de page ?
    Dans ton application qui utilise la BDD ?
    Alors ce n'est pas un problème SQL mais un problème à résoudre dans le code du programme.
    Quand je parle de changer d'onglet ou de page, je parle des onglet de l'administration SQL. Par exemple: Afficher - Structure - SQL - ...

    La BDD est utiliser via le site qui affiche les données et les modifies selon les besoins.

    Le site

    Essaie d'être un peu plus précis :
    - Qu'est-ce que tu essaies ?
    - Quel est le résultat ?
    - Quels sont les éventuels messages d'erreur ?
    J'essaie de remettre les donnée du champs prix dans l'ordre croissant.
    Il les remet dans l'ordre mais une fois que je quitte la page ou il m'affiche le résultat de ma requête SQL, dans l'administration SQL, il les remet dans l'ordre d'avant, c'est à dire aucun ordre. C'est agaçant, comme si mes requête ne fonctionne pas, comme si j'oublié de cliquez sur enregistrer modification de la table avant de quitter... Et il n'ya aucun message d'erreur...

    C'est normal, DECIMAL est en fait un type CHAR. Par contre, je pense que ça entraîne une conversion implicite lors des calculs et ça doit nuire aux performances.
    Il y a t'il une alternative ?

    Donne ton code php, on redirigera sur le forum adéquat si nécessaire.
    Voici mon code php, qui correspond à la page d'affichage d'une annonce...

    Code PHP : 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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    <?php
    header("Content-Type:text/html; charset=iso-8859-1");
    ?>
    <?php
     
    include('admin/includes/_sql.php');
     
    if(isset($_POST['rubrique'])) {
     
        if(strlen($_POST['email']) > 0) {
            function checkMail($adresse)
            {
               $Syntaxe='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$#';
               if(preg_match($Syntaxe,$adresse))
                  return true;
               else
                 return false;
            }
     
            if(checkMail($_POST['email'])) {
     
                $email = $_POST['email'];
                $rubrique = $_POST['rubrique'];
     
                $sql_check = mysql_query("SELECT * FROM emails WHERE email='$email' AND rubrique='$rubrique'");
                if(mysql_num_rows($sql_check) <= 0) {
     
                    if(mysql_query("INSERT INTO emails (email,rubrique) VALUES ('$email','$rubrique')")) {
     
                        $msg[] = "Votre inscription est effectuée, vous recevrez toutes les nouvelles liée à cette rubrique";
     
                    }
                    else {
     
                        $erreur[] = "Erreur système, veuillez contacter le Webmaster.<br />".mysql_error();
     
                    }
     
                }
                else {
     
                    $erreur[] = "Vous êtes déjà inscrit pour cette rubrique";
     
                }
     
            }
            else {
     
                $erreur[] = "Votre adresse E-Mail n'est pas valide, veuillez la vérifier.";
     
            }
     
        }
        else {
     
            $erreur[] = "Veuillez indiquer votre adresse E-Mail";
     
        }
     
    }
     
    ?>
    <?php
     
    $sql = mysql_query("SELECT * FROM annonces WHERE rubrique=1");
    if(mysql_num_rows($sql) > 0) {
     
        while($data = mysql_fetch_array($sql)) {
     
            $thumbPhoto = substr($data['photo'],7,strlen($data['photo']));
            $thumbPhoto = "admin/photos/thumb_".$thumbPhoto;
     
        ?>
     
     
        <!-- DEBUT ANNONCE -->
    <table width="97%" border="0" cellpadding="0" cellspacing="5" id="table">
    <tr>
              <td width="271" rowspan="4" class="Style1"><ul class="ulaffiche"> <li>
        <div><a href=<?php echo $thumbPhoto; ?> target="_blank">
                  <img src="<?php echo $thumbPhoto; ?>" hspace="0" vspace="0"/></a></div>
                    </li>
          </ul>           </td>
          <td width="345" height="32" colspan="5" class="Style1"><span class="Style2"><?php echo stripslashes($data['titre']); ?></span></td>
    </tr>
            <tr>
                <td height="18" colspan="5" valign="top" class="prix"><span class="prix"><?php echo stripslashes($data['prix']); ?>€</span></td>
      </tr>
            <tr>
              <td height="18" colspan="5" valign="top" class="lieu"><?php echo stripslashes($data['lieu']); ?></td>
        </tr>
            <tr>
                <td height="77" colspan="5" valign="top" class="Style3"><?php echo nl2br(stripslashes($data['comment'])); ?></td>
        </tr>
        </table>
    <table width="632" border="0">
      <tr>
        <td width="485"><span class="Style4">
          <?php
                    $thumbs = explode(';',$data['thumbs']);
                    $i=1;
                    foreach($thumbs as $id=>$value) {
     
                        $thumb = substr($value,7,strlen($value));
                        $thumb = "admin/photos/thumb_".$thumb; 
     
     
     
                    echo '********<a href="admin/'.$value.'" target="_blank"><img src="'.$thumb.'" border="0" width="160" height="110" /></a>';
     
                        $i++; }?>
        </span></td>
      </tr>
    </table>
    <?php
     
        }
     
    }
    ?>
    <table width="200" border="0">
      <tr>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
      </tr>
    </table>
    J'espère avoir était plus clair...

    Merci encore pour vos aides !

  10. #10
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par hitchcoke Voir le message
    Quand je parle de changer d'onglet ou de page, je parle des onglet de l'administration SQL. Par exemple: Afficher - Structure - SQL - ...
    C'est une partie de ton application qui est réservée à l'administrateur ?

    J'essaie de remettre les donnée du champs prix dans l'ordre croissant.
    Il les remet dans l'ordre mais une fois que je quitte la page ou il m'affiche le résultat de ma requête SQL, dans l'administration SQL, il les remet dans l'ordre d'avant, c'est à dire aucun ordre. C'est agaçant, comme si mes requête ne fonctionne pas, comme si j'oublié de cliquez sur enregistrer modification de la table avant de quitter... Et il n'ya aucun message d'erreur...
    Dans une table SQL, il n'y a pas d'ordre. Il faut considérer une table comme un sac de billes : on ne sait pas a priori dans quel ordre ont été mises les billes dans le sac. Par contre, on peut créer des requêtes d'interrogation de la table avec une clause ORDER BY qui va ordonner les billes mais juste pour l'affichage du résultat. Ca ne change pas l'ordre dans la table puisqu'il n'y en a pas !

    Il y a t'il une alternative ?
    C'est au programme de se préoccuper de la manière d'afficher les résultats et donc de procéder au formatage des données de type FLOAT avec x,yzabE2 en format lisible par l'utilisateur xyz,ab. Et comme il s'agit d'un prix, avec même un joli symbole monétaire derrière !

    Pour le reste, voir forum PHP.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  11. #11
    Membre Expert
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    C'est normal, DECIMAL est en fait un type CHAR. Par contre, je pense que ça entraîne une conversion implicite lors des calculs et ça doit nuire aux performances.
    Il me semble que c'est tout de même le type conseillé pour tout ce qui est monétaire (cela dit, ce n'est pas mon domaine). Les performances doivent être 'suffisantes', et surtout secondaires dans la mesure où un arrondi du à un FLOAT n'est généralement pas acceptable.

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Par défaut
    Et bien voilà, après un déplacement de post, plus aucune réponse...
    C'est bien utile...

    Merci quand même.

    Bonne vacances j'imagine.

  13. #13
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Je dois avouer que je suis un peu perdue... Tu cherchais à faire un tri de tes annonces, tu as la syntaxe de la requête avec l'order by pour effectuer ce tri, tu as un code d'affichage qui me parait parfaitement correct. Qu'est-ce qu'il te manque ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

Discussions similaires

  1. Trier par ordre croissant une colonne de tableau
    Par c.piette dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 12/05/2015, 20h21
  2. [PR-2010] Supprimer les doublons d'une listbox et la trier par ordre croissant
    Par Antonin Boloch dans le forum Project
    Réponses: 2
    Dernier message: 07/05/2014, 16h56
  3. Trier par ordre croissant des valeurs dans un tableau
    Par ftrap dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 26/06/2013, 10h35
  4. creation de nouvelles feuilles et les trier par ordre croissant
    Par lps02 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/09/2012, 23h53
  5. Réponses: 2
    Dernier message: 17/06/2007, 19h17

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