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 PostgreSQL Discussion :

Récupérer une ligne aléatoirement


Sujet :

Requêtes PostgreSQL

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

    Informations forums :
    Inscription : Décembre 2009
    Messages : 149
    Points : 66
    Points
    66
    Par défaut Récupérer une ligne aléatoirement
    Bonjour.
    Voila mon problème: j'ai une requête qui me retourne plusieurs lignes. Cependant je n'en voudrais qu'une à la fois. Je fais donc un LIMIT 1 à la fin de ma requête.
    Problème, dans ce cas, le SGBD me retourne toujours la même ligne. Or je voudrais qu'il récupère à chaque fois une ligne différente.
    Peu importe si il choisit la ligne de façon aléatoire ou si il suit un cheminement précis tant que chacune des lignes de ma requête peut être retournée.
    Est ce possible à faire, si oui, comment?
    Merci d'avance!

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    Quel est l'utilité / cadre d'un tel procédé ?

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

    Informations forums :
    Inscription : Décembre 2009
    Messages : 149
    Points : 66
    Points
    66
    Par défaut
    Je passe mes requêtes une a une a un outil qui les traite. Cet outils peut créer des erreurs, pour ne pas rappeler toujours la ligne en erreur et ainsi bloquer d'autres lignes potentiellement correctes, je voudrais qu'il puisse en prendre une autre.

    J'ai également trouvé la solution, il suffit d'ajouter un ORDER BY random() avant le LIMIT.

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour, ne pensez-vous pas que flagger la ligne en erreur serait une meilleure solution ?

    Là vous risquez d'appeler 2 fois la même ligne ...


    Sinon, pourquoi faire n requêtes alors qu'un curseur (et donc une seule requête) pourrait traiter ceci ?

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

    Informations forums :
    Inscription : Décembre 2009
    Messages : 149
    Points : 66
    Points
    66
    Par défaut
    Les lignes en erreurs sont flaggués, cependant, ces erreurs peuvent être résolues dans un délai plus ou moins grand, aussi, je veux qu'elles soient passées à nouveau à mon outil jusqu’à ce que celui ci les traite complètement. Comme les erreurs peuvent être de différents types, je ne voudrais pas rester bloqué sur une erreur qui mettra six mois a corriger alors que d'autres sont déjà corrigées.

    Pour les curseurs, j'avoue ne pas connaitre, il faut que je me renseigne. Tout cours que vous me proposerez sera le bienvenue.

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Quand vous résolvez une erreur vous déflaggez la ligne en question ?


    Un truc "correct" serait de ne traiter que les lignes non flaggées en fait.
    Après je ne sais pas comment vous appelez votre outil ni à partir de quoi.


    Les curseurs sont un peu la base des traitements itératifs.

    Par exemple pour du pgsql : http://www.postgresql.org/docs/9.1/s...l-cursors.html

    Mais ceci va varier selon le langage de prog utilisé.

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

    Informations forums :
    Inscription : Décembre 2009
    Messages : 149
    Points : 66
    Points
    66
    Par défaut
    En fait, c'est un programme C++ qui appelle une fonction PHP à l'aide d'un webservice. La fonction PHP exécute la requête dont je parle et récupère une ligne à traiter. Si il n'y a aucune ligne à traiter, il essaye les lignes qui sont déjà passées dans le programme C++ mais qui sont en erreur. Si une ligne a été trouvée, elle est transmise au programme C++.
    Du coup je ne pense pas que les curseurs me soient utiles ici puisque les données de PHP sont perdues d'un appel à l'autre.

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

Discussions similaires

  1. [MySQL] Récupérer une ligne aléatoire dans MySQL
    Par heretik25 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/01/2012, 16h39
  2. Récupérer une ligne d'une matrice
    Par setsuko974 dans le forum Langage
    Réponses: 4
    Dernier message: 13/03/2007, 20h31
  3. Récupérer une ligne aléatoire avec fgets
    Par Alexbad dans le forum C
    Réponses: 20
    Dernier message: 30/07/2006, 23h53
  4. Récupérer une ligne sur 5
    Par migol dans le forum C
    Réponses: 8
    Dernier message: 24/05/2006, 10h03
  5. comment obtenir une ligne aléatoirement
    Par titoumimi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/05/2005, 15h52

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