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

Requêtes MySQL Discussion :

Récupérer l'id précedent avec ORDER BY date


Sujet :

Requêtes MySQL

  1. #1
    Membre actif
    Inscrit en
    Février 2009
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 626
    Points : 237
    Points
    237
    Par défaut Récupérer l'id précedent avec ORDER BY date
    Bonjour,

    je cherche désespérément à récupérer l'id précédent,
    normalement une simple requête du genre suffit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = mysql_query("SELECT cpj_id FROM journal WHERE cpj_id > '.$cpj_id.' ORDER BY cpj_id ASC LIMIT 1");
    mais le soucis vient du ORDER dont j'ai absolument besoin, ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query = mysql_query("SELECT cpj_id FROM journal WHERE cpj_id > '.$cpj_id.' ORDER BY DATE_FORMAT(cpj_date,'%y/%m/%d-%H:%i') DESC LIMIT 1");
    sachant que du fait du order basé sur la date, l'id n'est plus décroissant.. comment récupérer l'id ?

    merci d'avance pour vos réponses,

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 338
    Points : 39 738
    Points
    39 738
    Billets dans le blog
    9
    Par défaut
    bonjour

    D'où vient la valeur de votre colonne ID, Est-ce une colonne calculée par le SGBD (identity column) ?
    Attention : si identity column, alors vous ne pouvez pas garantir que la séquence des ID respecte la chronologie d'insertion

  3. #3
    Membre actif
    Inscrit en
    Février 2009
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 626
    Points : 237
    Points
    237
    Par défaut
    Oui c'est bien le problème, l'incrémentation peut être du genre : 19,8,3,1,16, etc.

    ce qui m'intéresse c'est d'envoyer 19 dans la requête cité plus haut et de récupérer => 8
    ou si => 8, récupérer => 3, etc.

    merci d'avance si vous avez une solution

  4. #4
    Membre confirmé Avatar de Sebwar
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2012
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 172
    Points : 498
    Points
    498
    Par défaut
    Hello !

    L'ordre dépend de la date ?

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 338
    Points : 39 738
    Points
    39 738
    Billets dans le blog
    9
    Par défaut
    La seule solution pour connaitre la séquence d'insertion est d'avoir des colonnes d'horodatage et encore : même avec un time stamp, on peut avoir des doubles

  6. #6
    Membre actif
    Inscrit en
    Février 2009
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 626
    Points : 237
    Points
    237
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    La seule solution pour connaitre la séquence d'insertion est d'avoir des colonnes d'horodatage et encore : même avec un time stamp, on peut avoir des doubles
    Actuellement, la requête cité plus haut me retourne le dernier id

  7. #7
    Membre confirmé Avatar de Sebwar
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2012
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 172
    Points : 498
    Points
    498
    Par défaut
    Actuellement, la requête cité plus haut me retourne le dernier id
    c'est que pour l'instant vos id on un ordre chronologique.

    J'ai vraiment du mal a comprendre ce que vous voulez faire.
    Récupérer un id "précédent" n'as aucun sens.
    En revanche, récupéré l'id d'un une ligne dont la date est celle juste avant une autre ligne, ça a plus de sens (j'ose espéré que c'est ça dont vous avez besoin )

    pour retourner l'id de la ligne qui a pour date celle d'avant la ligne $cpj_id :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT cpj_id FROM journal t1
    WHERE cpj_id != '.$cpj_id.'
    	and not exists (select *
    				from journal as t2
    				where t1.cpj_date < t2.cpj_date
    				and cpj_id != '.$cpj_id.')
    Évidement cette requête retourne plusieurs lignes si il y a plusieurs évènement avec la même date

  8. #8
    Membre actif
    Inscrit en
    Février 2009
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 626
    Points : 237
    Points
    237
    Par défaut
    Effectivement c'était un peu farfelu comme résonnement, je pense avoir trouvé la solution en traitant cela directement dans des tableaux du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     foreach(array_reverse($class->lstCpj) as $id=>$operation) {
    une fois le traitement effectué et récupéré dans un second tableau, je réinjecte les données dans l'ordre par date (sans utilisé array_reverse()) ...

    bref, merci beaucoup, cela m'a aider à voir le problème autrement.
    bonne journée

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

Discussions similaires

  1. récupérer des dates précedentes
    Par nabou dans le forum Développement
    Réponses: 1
    Dernier message: 11/05/2012, 10h30
  2. Récupérer 10 nb différents avec un calcul aléatoire
    Par BXDSPORT dans le forum Langage
    Réponses: 3
    Dernier message: 04/08/2002, 02h35
  3. récupérer la valeur de sortie d'un thread
    Par jakouz dans le forum Langage
    Réponses: 3
    Dernier message: 31/07/2002, 11h28
  4. Réponses: 11
    Dernier message: 23/07/2002, 14h33
  5. Comment récupérer une adresse MAC ?
    Par psau dans le forum Développement
    Réponses: 7
    Dernier message: 19/07/2002, 17h26

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