2017-10-13 4 views
0

J'ai cette requête SQL qui sélectionne avec la limite et l'ordre par rand donc je reçois le numéro de status puis mélange le résultat entier pour obtenir un résultat aléatoire pas un bloc pour chaque status, et fonctionne comme prévu :SQL Union Mise à jour

(SELECT * FROM `vicidial_list` WHERE phone_number LIKE "7%" AND list_id NOT IN (500,1000) AND status = "AR" LIMIT 1038) 
UNION 
(SELECT * FROM `vicidial_list` WHERE phone_number LIKE "7%" AND list_id NOT IN (500,1000) AND status = "CBHOLD" LIMIT 372) 
UNION 
(SELECT * FROM `vicidial_list` WHERE phone_number LIKE "7%" AND list_id NOT IN (500,1000) AND status = "NEW" LIMIT 3824) 
UNION 
(SELECT * FROM `vicidial_list` WHERE phone_number LIKE "7%" AND list_id NOT IN (500,1000) AND status = "PI" LIMIT 1405) 
UNION 
(SELECT * FROM `vicidial_list` WHERE phone_number LIKE "7%" AND list_id NOT IN (500,1000) AND status = "NRP" LIMIT 500) 
UNION 
(SELECT * FROM `vicidial_list` WHERE phone_number LIKE "7%" AND list_id NOT IN (500,1000) AND status = "RCAT" LIMIT 500) 
ORDER BY RAND() 

maintenant, je veux à jour list_id-200 mais cela ne fonctionne pas:

(UPDATE `vicidial_list` SET list_id = 200 WHERE phone_number LIKE "7%" AND list_id NOT IN (500,1000) AND status = "AR" LIMIT 1038) 
UNION 
(UPDATE `vicidial_list` SET list_id = 200 WHERE phone_number LIKE "7%" AND list_id NOT IN (500,1000) AND status = "CBHOLD" LIMIT 372) 
UNION 
(UPDATE `vicidial_list` SET list_id = 200 WHERE phone_number LIKE "7%" AND list_id NOT IN (500,1000) AND status = "NEW" LIMIT 3824) 
UNION 
(UPDATE `vicidial_list` SET list_id = 200 WHERE phone_number LIKE "7%" AND list_id NOT IN (500,1000) AND status = "PI" LIMIT 1405) 
UNION 
(UPDATE `vicidial_list` SET list_id = 200 WHERE phone_number LIKE "7%" AND list_id NOT IN (500,1000) AND status = "NRP" LIMIT 500) 
UNION 
(UPDATE `vicidial_list` SET list_id = 200 WHERE phone_number LIKE "7%" AND list_id NOT IN (500,1000) AND status = "RCAT" LIMIT 500) 
ORDER BY RAND() 

Toutes les suggestions?

Merci.

+4

Aucune UNION avec UPDATE – Serg

Répondre

2

Il suffit d'exécuter chaque UPDATE comme une déclaration distincte:

UPDATE `vicidial_list` SET list_id = 200 WHERE phone_number LIKE "7%" AND list_id NOT IN (500,1000) AND status = "AR" ORDER BY RAND() LIMIT 1038; 
UPDATE `vicidial_list` SET list_id = 200 WHERE phone_number LIKE "7%" AND list_id NOT IN (500,1000) AND status = "CBHOLD" ORDER BY RAND() LIMIT 372; 
UPDATE `vicidial_list` SET list_id = 200 WHERE phone_number LIKE "7%" AND list_id NOT IN (500,1000) AND status = "NEW" ORDER BY RAND() LIMIT 3824; 
UPDATE `vicidial_list` SET list_id = 200 WHERE phone_number LIKE "7%" AND list_id NOT IN (500,1000) AND status = "PI" ORDER BY RAND() LIMIT 1405; 
UPDATE `vicidial_list` SET list_id = 200 WHERE phone_number LIKE "7%" AND list_id NOT IN (500,1000) AND status = "NRP" ORDER BY RAND() LIMIT 500; 
UPDATE `vicidial_list` SET list_id = 200 WHERE phone_number LIKE "7%" AND list_id NOT IN (500,1000) AND status = "RCAT" ORDER BY RAND() LIMIT 500; 
+0

Merci, mais qu'en est-ORDER BY RAND() à mélanger – medk

+1

Vous devez ajouter 'ORDER BY RAND()' à chaque 'UPDATE'. J'ai mis à jour ma réponse avec ce changement. –

+0

Oui, je le sais mais je veux dire mélanger tout le résultat final comme la sortie du premier code que j'ai posté, pas pour mélanger chaque mise à jour séparément. – medk