Update après un select [Réglé] [SQL] - SQL/NoSQL - Programmation
Marsh Posté le 23-02-2015 à 16:11:11
Sous MySQL? Nope, pas en une seule query.
MSSQL a UPDATE…OUTPUT, Postgres et Oracle ont UPDATE…RETURNING, MySQL a rien du tout (MariaDB a delete…returning mais pas update…returning).
Accessoirement, ORDER BY rand() est lent, il doit aléatoirement trier les lignes en mémoire avant d'appliquer LIMIT: http://jan.kneschke.de/projects/mysql/order-by-rand/
Marsh Posté le 23-02-2015 à 18:48:08
Merci masklinn
en effet je suis sous mysql. Pas grave je vais créer un script php.
C'est bon a savoir merci
Marsh Posté le 25-02-2015 à 11:48:33
Je suis pas certain d'avoir compris, et je ne suis pas certain de ce que je vais proposer, mais est-ce qu'il n'est pas possible de faire ça :
Code :
|
?
Pas testé, mais dans l'idée me semble que ça devrait être possible.
1 seule instruction.
Absolument pas optimisé, c'est vraiment très lent comme solution, mais c'est toujours mieux que de faire faire ça par du PHP ou un autre client quel qu'il soit.
Et en cherchant un peu, on peut peut-être optimiser un poil !?
Marsh Posté le 25-02-2015 à 12:12:08
kao98 a écrit : Je suis pas certain d'avoir compris, et je ne suis pas certain de ce que je vais proposer, mais est-ce qu'il n'est pas possible de faire ça |
Ça va faire un update de records sélectionnés via le bon critère, mais ça va pas renvoyer les records sélectionnés. De ce que j'ai compris, il veut récupérer les records et les mettre à jour (la maj c'est pour savoir quels records ont été récupérés pour les bricoler je présume, histoire que le coup d'après tu resélectionnes pas des records déjà processés).
Marsh Posté le 25-02-2015 à 14:06:29
masklinn a écrit : |
C'est pour ça que j'ai dit que je n'étais pas sûr d'avoir compris.
J'ai bien vu que c'est ce à quoi tu avais répondu, mais j'ai pas l'impression d'y lire cela dans sa question en fait.
Marsh Posté le 23-02-2015 à 15:58:41
Bonjour,
J'ai besoin de faire une extraction aléatoire de 20 personnes dans une base de donnée sous phpmyadmin
De cette extraction, il faut que j'indique "1" dans le champ "sortie" pour chaque ligne extraite. (donc je connais pas les id a l'avance)
Est ce que cela est possible ?
Ma requête de base est la suivante :
SELECT * FROM `membre` WHERE sortie = '0' ORDER BY rand() LIMIT 20
J'exporte la base de donnée des résultats avec phpmyadmin. Pour l'injecter dans une autre base. C'est rapide et simple.
Et c'est après, pour mettre a jour en sortie="1" où je sèche, en théorie il faudrait quelque chose du genre :
SELECT * FROM `membre` WHERE sortie = '0' ORDER BY rand() LIMIT 20
{ update sortie = '1' }
Si quelqu'un peut m'aiguiller merci a lui
Message édité par tomware le 23-02-2015 à 18:48:20