2013-09-10 5 views
-1

У меня есть список имени пользователя в файл, например так:Обновление таблицы MySQL на основе другой таблицы и файла ввода

 
userE 
userZ 
userA 
... 

У меня есть две таблицы в базе данных MySQL

Users стол:

 
| UID | NAME | 
|-----|-------| 
| 101 | userQ | 
| 102 | userZ | 
| 103 | userA | 
... 

Roles стол:

 
| UID | RID | 
|-----|-----| 
| 101 | 10 | 
| 101 | 20 | 
| 102 | 10 | 
| 102 | 30 | 
| 103 | 10 | 
| 103 | 30 | 
| 103 | 20 | 
... 

Список имени пользователя из файла должен совпадать с таблицей пользователя, чтобы определить uid, и этот идентификатор пользователя, если существует для rid=30, затем эту строку нужно удалить.

Дайте мне знать, если это еще не ясно.

+0

Покажите нам, что вы уже пробовали. – Itay

+1

Да, я имел в виду удаление строки, содержащей rid: 30, если этот uid указан в файле. – Salton

ответ

1

Один из способов сделать это - сначала загрузить имена пользователей из файла во временную таблицу (позвоните по телефону delete_users) с помощью LOAD DATA INFILE.

CREATE TABLE delete_users (`name` varchar(32)); 

LOAD DATA INFILE '/tmp/delete_users.txt' 
INTO TABLE delete_users 
LINES TERMINATED BY '\n' -- or most likely '\r\n' if it's Windows 
(@name) 
SET name = TRIM(@name); 

Тогда вы использовать запрос

DELETE r 
    FROM roles r JOIN users u 
    ON r.uid = u.uid JOIN delete_users d 
    ON u.name = d.name 
    AND r.rid = 30; 

И, наконец, падение delete_users таблица

DROP TABLE delete_users; 

Вот SQLFiddle демо

+0

отлично! .. большое спасибо. Что не так с другими людьми, которые подают голос. – Salton

+0

Вы очень желанны. Я рад, что смогу помочь :) – peterm

+1

Что касается downvotes, то обычно они происходят из-за того, что вы не показываете, что вы уже пытались сделать (обычно соответствующие части вашего кода с объяснением, что вы ожидаете и что не работает), чтобы решить проблему в вашем вопросе. Это похоже на правила StackOverflow. Иногда, когда у вас еще нет кода, но создающего sqlfiddle, чтобы помочь людям, которые хотят помочь вам, обычно помогает от downvoted. – peterm

Смежные вопросы