Привет, я новичок в PHP и MySQL, и мне было интересно, как я могу удалить все записи user_id 3
из этих двух таблиц ниже, используя PHP и MySQL?
Мои таблицы MySQL
CREATE TABLE ls ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, skill VARCHAR(255) DEFAULT NULL, experience VARCHAR(22) DEFAULT NULL, self_grade VARCHAR(10) DEFAULT NULL, date_created DATETIME NOT NULL, date_updated DATETIME DEFAULT NULL, PRIMARY KEY (id) ); CREATE TABLE us ( id INT(13) UNSIGNED NOT NULL AUTO_INCREMENT, skill_id INT(13) UNSIGNED NOT NULL, user_id INT(13) UNSIGNED NOT NULL, PRIMARY KEY (id) );
us table values
id skill_id user_id 9 7 3 10 8 3 11 9 3 12 10 3 13 17 6
Значения таблицы ls
id skill experience self_grade date_created date_updated 7 html 5 years A 2010-10-19 07:11:08 2010-10-19 07:12:06 8 jquery 10 years B 2010-10-19 07:11:27 2010-10-19 07:12:06 9 css 1 year NULL 2010-10-19 07:11:38 2010-10-19 07:12:06 10 php 2 years C 2010-10-19 07:13:05 NULL 17 php 2 years C 2010-10-19 07:19:05 NULL
Вы можете получить все строки, принадлежащие user_id = 3
а затем создать инструкцию DELETE
сгенерированным WHERE
.
Но, однако, мне интересно, есть ли у вас неправильный дизайн таблицы, как у вас есть: n отношение между пользователем и умением, и вы хотите удалить все навыки, с которыми связан пользователь с id 3. Но это подразумевает соотношение 1: m между пользователем и навыком (1 пользователь имеет несколько навыков, а не делится навыками с другими). Или, может быть, у меня что-то не так …?
MySQL поддерживает удаление нескольких таблиц, используйте:
DELETE a, b FROM ls a JOIN us b ON b.skill_id = a.id WHERE b.user_id = 3
Да, вы можете использовать оператор DELETE с несколькими таблицами, например.
DELETE FROM ls, us USING ls JOIN us ON us.skill_id = ls.id WHERE ls.user_id = 3