[Réglé] [SQL] Update après un select

Update après un select [Réglé] [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 23-02-2015 à 15:58:41    

Bonjour,  :hello:  
 
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 :

Citation :

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 :

Citation :

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
Reply

Marsh Posté le 23-02-2015 à 15:58:41   

Reply

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/


Message édité par masklinn le 23-02-2015 à 16:15:52

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 23-02-2015 à 18:48:08    

Merci masklinn :hello:  
 
en effet je suis sous mysql. Pas grave je vais créer un script php.
 
C'est bon a savoir merci :jap:

Reply

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 :
  1. UPDATE
  2.  t.sortie=1
  3.  
  4. FROM
  5.  ma_table t
  6.  
  7. WHERE
  8.  t.id IN
  9.  (
  10.    SELECT
  11.      ma_table.id
  12.    
  13.    FROM
  14.      ma_table
  15.  
  16.    WHERE
  17.      ma_table.sortie = 0
  18.  
  19.    ORDER BY RAND()
  20.    LIMIT 20
  21.  )
 

? :??:

 

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 !?

Message cité 1 fois
Message édité par kao98 le 25-02-2015 à 11:49:53

---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

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).

Message cité 1 fois
Message édité par masklinn le 25-02-2015 à 12:12:39

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 25-02-2015 à 14:06:29    

masklinn a écrit :


Ç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).


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.


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed