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

Faire une boucle d'UPDATE?


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Faire une boucle d'UPDATE?
    Bonjour à tous,

    je travaille sur un plugin wordpress et je me retrouve face à problème que je ne sais pas résoudre.

    J'ai une table usermeta (permet d'ajouter des caractéristiques aux users) :
    umeta_id (id unique)
    user_id (id du user)
    meta_key (nom de la meta)
    meta_value (valeur de la meta)

    Pour chaque user, j'ai deux meta, exemple pour l'user 1 :
    user_id (1) - meta_key (role) - meta_value (abonné)
    user_id (1) - meta_key (credits) - meta_value (10)

    En gros, j'ai fait une tache cron pour update les crédits de chaque membre avec cette requete :

    UPDATE img_usermeta SET meta_value = '20' WHERE meta_key = 'credits'

    Le truc, c'est que ca update les crédits de tout les users à 20, et moi je ne veux le faire que pour les user avec un role 'abonné".
    Avec des meta dans deux tables j'y arrive, mais dans la même impossible !

    Quelqu'un aurai une idée propre? Il y a environ 100.000 users, tache lancé tous les 24h.

    Merci d'avance !

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Si je comprends bien, tu veux mettre à 20 les crédits de tous les abonnés ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    UPDATE img_usermeta u1
    SET u1.meta_value = 20
    WHERE u1.meta_key = 'credits'
    	AND u1.user_id IN
    	(
    		SELECT u2.user_id
    		FROM img_usermeta u2
    		WHERE u2.meta_key = 'role'
    			AND u2.meta_value = 'abonné'
    	)
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    C'est tout à fait ça, merci pour ton aide !

    Je décortique ta requête pour la comprendre, je la test et je reviens ici.

    Merci pour ta rapidité

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Aie ! Petite erreur retour lors d'execution du script, donnée par l'affichage des erreurs de query wordpress :

    WordPress database error: [You can't specify target table 'u1' for update in FROM clause]

    J'essaye de regarder de mon côté, si tu as une idée je suis preneur

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Ok, j'ai pigé grâce à ce lien

    Edit, résolu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    UPDATE usermeta
    	SET meta_value = 20
    	WHERE meta_key = 'credits'
    	AND user_id IN
    		(
      		SELECT user_id FROM
      		(
        		SELECT DISTINCT user_id FROM usermeta WHERE meta_key = 'role' AND meta_value = 'abonné'
      		) 
      		AS tmptable
    		)

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

Discussions similaires

  1. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  2. [VBA][Excel] Comment faire pour faire une boucle?
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 29
    Dernier message: 19/12/2005, 14h48
  3. faire une boucle ds un formulaire
    Par gohu13 dans le forum Access
    Réponses: 1
    Dernier message: 21/09/2005, 12h54
  4. Réponses: 2
    Dernier message: 01/08/2005, 16h55
  5. Comment faire une boucle ???
    Par HookerSeven dans le forum Access
    Réponses: 6
    Dernier message: 17/06/2005, 12h58

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