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 un tableau sur un élément bien précis


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 72
    Points : 45
    Points
    45
    Par défaut Trier un tableau sur un élément bien précis
    Bonjour à tous,

    voilà je vous explique mon problème, du moins mon interrogation.

    J'ai deux tables : une table dossier et une table actualité, structurées de la manière suivante (de manière simplifiée) :

    TBL_DOSSIER : id_dossier, titre, date_publication
    TBL_ACTUALITE : id_actualite, titre, date_publication

    Dans chacune d'entre elle, j'ai donc un champ "date_publication". Ce que je voudrais faire, c'est requêter sur chacune d'entre elle pour avoir les 10 dernières actualités et les 10 derniers dossiers. Fusionner ensuite le résultat de ces requêtes et les trier par 'date_publication', afin d'avoir une liste des 20 dernières publications, articles et dossiers confondus, le tout classé par 'date_publication'.

    Voilà ce à quoi j'ai pensé :

    - Faire deux requêtes, stocker le résultat de chacune d'entre elle dans un array, puis les fusionner avec array_merge. Ensuite c'est là que ça se complique pour moi ! J'aurais aimé faire un tri de ce tableau fusionné sur l'élément 'date_publication'. Et c'est là que je bloque. J'ai essayé tout un tas de fonction mais je ne m'en sors pas.

    Voici à quoi ressemble une de mes lignes de mon tableau fusionné :

    i:0;a:3:{i:0;s:2:"10";i:1;s:41:"On vous dit tout sur le chauffage solaire";i:2;s:19:"2009-09-07 21:30:53";}

    Ce que j'aurais aimé c'est lui passer une fonction qui me permette de lui préciser sur quel élément faire son tri, par exemple la position "i:2;s:19" qui correspond bien à ma date_publication sur l'ensemble de mes lignes.

    Enfin voilà j'espère que quelqu'un pourra m'aider sur ce point parce que je ne m'en sors pas. Si vous avez d'autres idées pour arriver à la même finalité, n'hésitez pas je suis preneur.

    Par avance grand merci pour vos précieux conseils.

  2. #2
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 563
    Points : 2 390
    Points
    2 390
    Par défaut
    Et avec une requête UNION ?

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT id_dossier as id, titre, date_publication FROM TBL_DOSSIER
     
    UNION
     
    SELECT id_actualite as id, titre, date_publication FROM TBL_ACTUALITE
     
    ORDER BY date_publication DESC
    LIMIT 20
    Zend Certified PHP Engineer

    « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 72
    Points : 45
    Points
    45
    Par défaut
    J'y avais absolument pas pensé ! C'est beaucoup plus simple comme ça, ça fonctionne très bien ! Grand merci Seb33300 !

  4. #4
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    sinon pour faire selon ton idée :

    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
    <?php
    $results = array();
    // DOSSIERS
    $sql = "/* requete de récup des DOSSIERS */ SELECT blablablablal .... LIMIT 10";
    $q = mysql_query($sql);
    if (mysql_num_rows($q) > 0) {
        while ($r = mysql_fetch_assoc($q)) {
            $results[$r['date_publication']] = $r;
        }
    }
    // ACTUALITES
    $sql = "/* requete de récup des ACTUALITES*/ SELECT blablablablal .... LIMIT 10";
    $q = mysql_query($sql);
    if (mysql_num_rows($q) > 0) {
        while ($r = mysql_fetch_assoc($q)) {
            $results[$r['date_publication']] = $r;
        }
    }
    ksort($results);
    // Et voilà !

  5. #5
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 563
    Points : 2 390
    Points
    2 390
    Par défaut
    Tu peux aussi rajouter une 4eme colonne en dur pour savoir par la suite si il s'agit d'un dossier ou d'une actu :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT id_dossier as id, titre, date_publication, 'dossier' as type FROM TBL_DOSSIER
     
    UNION
     
    SELECT id_actualite as id, titre, date_publication, 'actu' as type FROM TBL_ACTUALITE
     
    ORDER BY date_publication DESC
    LIMIT 20
    Zend Certified PHP Engineer

    « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 72
    Points : 45
    Points
    45
    Par défaut
    Que demander de plus ! Gradn merci à vous messieurs, vous me sortez une fois de plus de mon sac de noeuds !

    darkstar123456 je vais mettre ta solution dans un coin parce que je risquerais d'en avoir besoin un jour ou l'autre, merci à toi.

    Seb33300, merci à toi aussi pour toutes ces précisions.

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

Discussions similaires

  1. [Tableaux] Trier un tableau sur 2 élements!
    Par GYK dans le forum Langage
    Réponses: 5
    Dernier message: 09/12/2008, 15h30
  2. Réponses: 8
    Dernier message: 14/11/2007, 10h27
  3. trier un tableau sur les en-tetes de colonnes
    Par debutant_linux dans le forum Ruby on Rails
    Réponses: 10
    Dernier message: 29/08/2007, 10h39
  4. [8.5] Trier des champs dans un ordre bien précis!
    Par Gotch59 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 25/05/2007, 15h02
  5. Réponses: 3
    Dernier message: 18/07/2006, 12h16

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