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 :

ORDER BY plusieurs critères


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 281
    Points : 161
    Points
    161
    Par défaut ORDER BY plusieurs critères
    Bonjour,

    J'ai une table évènement constituée comme ceci :


    id titre date_debut date_fin
    1 Mon evenement 1 2014-09-10 15:40:00 2014-09-15 20:40:00
    2 Mon evenement 2 2014-09-15 15:40:00 2014-09-15 20:40:00
    -- -- -- --

    Je souhaite sélectionner les événements dans un intervalle donné en fonction d'une date X.

    Mon code PHP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $currentDate = $_GET['date'];			
    $dateToday = new DateTime(date("Y-m-d"));
    $dateSelect =  new DateTime($_GET['currentDate ']);
    $dateDiff = date_diff($dateToday, $dateSelect);	
    $interval = intval($dateDiff->format('%a'));
    Voici ma requête actuellement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT id 
    FROM evenements
    WHERE (CURRENT_DATE() + INTERVAL :interval DAY BETWEEN DATE(date_debut) AND DATE(date_fin))
    AND IF(DATE(date_fin) = CURRENT_DATE(), date_fin > CURRENT_TIMESTAMP(),1=1) 
    ORDER BY date_debut ASC
    où :interval est la variable PHP $interval qui correspond au nombre de jours entre la date X et aujourd'hui. Exemple pour : "Je souhaite sélectionner les événements qui se déroulent DEMAIN", $interval vaudra 1.

    Cependant j'aimerais trié mes résultats d'une manière bien particulière :

    - J'aimerais d'abord avoir les événements où la date de début est la date X et que la durée de l’événement soit inférieur à 1 jour rangé par date_debut ASC
    - Et ensuite les autres événements rangés par date_debut ASC.

    Auriez-vous une solution ou des pistes à me proposer ?
    Merci.

  2. #2
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Si tu essaies cela, ça résoud la partie : d'abord ceux dont la date de début est la date X, puis les autres après...
    Enfin si ça marche...
    J'avoue ne pas comprendre du tout ta clause if : si l'on est à la date de fin, renvoie false si heure de fin est supérieure à tout de suite , sinon true ?

    edit :

    ayé j'ai compris, je l'aurais écrit comme ça pour ma compréhension, mais c'est bon...
    On définit le rare cas où c'est faux, sinon, tout est bon...
    AND IF((DATE(date_fin) = CURRENT_DATE() AND CURRENT_TIMESTAMP() > date_fin ), false ,true)


    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
     
    SELECT id 
    FROM evenements
    WHERE CURRENT_DATE() + INTERVAL :interval DAY = DATE(date_debut)
    AND DATE(date_fin) - DATE(date_debut)=0
     
     
    UNION
     
    SELECT id 
    FROM evenements
    WHERE (CURRENT_DATE() + INTERVAL :interval DAY BETWEEN DATE(date_debut) AND DATE(date_fin))
    AND IF(DATE(date_fin) = CURRENT_DATE(), date_fin > CURRENT_TIMESTAMP(),1=1)  
     
    and id not in (
    	SELECT id as id2
    	FROM evenements
    	WHERE CURRENT_DATE() + INTERVAL :interval DAY = DATE(date_debut)
    	AND DATE(date_fin) - DATE(date_debut)=0
    )
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Et ça, ça passe ?
    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
     
    SELECT id ,
    case
    	WHEN CURRENT_DATE() + INTERVAL :interval DAY = DATE(date_debut)
    	AND DATE(date_fin) - DATE(date_debut)=0
    then 'a'
    else
    	'b'
    END as jour,
    FROM evenements
    WHERE (CURRENT_DATE() + INTERVAL :interval DAY BETWEEN DATE(date_debut) AND DATE(date_fin))
    AND IF((DATE(date_fin) = CURRENT_DATE() AND  CURRENT_TIMESTAMP() > date_fin ), false ,true)  
     
    order by jour,date_debut
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

Discussions similaires

  1. [VBA-E]filtre sur plusieurs Critères avec Excel
    Par Diablo_22 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/05/2006, 20h34
  2. Réponses: 4
    Dernier message: 26/04/2006, 14h02
  3. Réponses: 12
    Dernier message: 30/03/2006, 20h55
  4. order par plusieurs champs
    Par Death83 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 24/11/2005, 10h12
  5. [XSLT] - Trier un fichier sur plusieurs critères
    Par ytse dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 11/10/2005, 16h26

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