|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : décembre 2009 Messages : 53 ![]() |
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! |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 655 ![]() |
Bonjour,
Quel est l'utilité / cadre d'un tel procédé ? |
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : décembre 2009 Messages : 53 ![]() |
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. |
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 655 ![]() |
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 ? |
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : décembre 2009 Messages : 53 ![]() |
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.
|
|
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 655 ![]() |
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é. |
|
|
00
|
|
|
#7 |
|
Invité régulier
![]() Inscription : décembre 2009 Messages : 53 ![]() |
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. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com