J'essaie de résoudre un problème dont j'ai hérité avec un mauvais traitement de différentes sources de données. J'ai une table d'utilisateur qui contient les deux bons et mauvais utilisateurs.INSERT..ON DUPLICATE KEY UPDATE - mais pas en utilisant la clé en double pour comparer
create table `users`(
`user_id` int(13) NOT NULL AUTO_INCREMENT ,
`email` varchar(255) ,
`name` varchar(255) ,
PRIMARY KEY (`user_id`)
);
Dans ce tableau, la clé primaire est actuellement définie comme user_id.
J'ai une autre table ('users_evil') qui contient UNIQUEMENT les mauvais utilisateurs (tous les utilisateurs de cette table sont inclus dans la première table) - les ID utilisateur sur cette table ne correspondent PAS à ceux de la première table.
Je veux avoir tous mes utilisateurs dans une table, et simplement signaler les bons et les mauvais. Qu'est-ce que je veux faire est de modifier la table des utilisateurs et ajouter une colonne ('mal') par défaut 0. Je veux ensuite vider les données de ma table 'users_evil'), puis exécutez un INSERT..ON DUPLICATE KEY UPDATE avec ces données dans la première table (réglage 'evil' = 1 où les emails correspondent)
Le problème est que le 'PK' est défini sur l'ID utilisateur et non sur le 'email'. Toutes les suggestions, ou même une autre stratégie pour réussir cela. Puis-je exécuter cette instruction mais traiter une autre colonne comme PK uniquement pour la durée de l'instruction?
Je n'étais pas au courant que vous pourriez vous joindre à une mise à jour - c'est exactement pourquoi je poste à SO. Merci pour cette réponse. – calumbrodie
Je ne vois pas l'intérêt d'avoir des index temporaires pour une telle requête si vous ne l'exécutez qu'une seule fois. –
En effet. Votre méthode a beaucoup plus de sens. Marqué comme correct, merci pour votre aide – calumbrodie