php 删除两个数据库表之间同一行中第二列的值和第一列的值

omqzjyyz  于 2022-12-25  发布在  PHP
关注(0)|答案(1)|浏览(126)

我试图删除两个表之间相同的id。并通过获取图像文件值来删除存储文件。例如过程:用户ID(表1)-〉用户ID(表2)-〉化身-〉文件名-〉删除图像-〉删除第一表和第二表之间来自相同用户ID的所有数据
我有两张table,

*user* table
| user_id  | Full_name      |
| -------- | -------------- |
| 1        | Steve Jobs     |
| 2        | Bill Gates     |
| 3        | Elon Musk      |

*users_option* table (with both column foreign keys)
|   user_id    | user_option    | user_value           |
| ------------ | -------------- | --------------       |
| 1            | email          | abc@abc.com          |
| 1            | avatar         | 'big.jpg','sml.png'  |
| 1            | username       | stevejobs            |
| 2            | email          | def@def.com          |
| 2            | avatar         | 'big.png','sml.jpeg' |
| 2            | username       | billgates            |

我几乎不会用ORM MySQL编写这段代码

ORM::table($config['db']['pre'].'user')
ORM::table($config['db']['pre'].'user_option')

简单地说,我只是想完全删除来自同一个user_id的所有数据。
我只想完全删除来自同一个user_id的所有数据。

kx7yvsdv

kx7yvsdv1#

要在MySQL中使用ORM删除两个表中同一user_id的所有数据,可以将DELETE语句与JOIN子句一起使用。
下面是一个示例,说明如何执行此操作:

DELETE u, uo
FROM user AS u
JOIN user_option AS uo ON u.user_id = uo.user_id
WHERE u.user_id = :user_id;

这将删除user和user_option表中具有指定user_id的所有行。您可以使用预准备语句将值绑定到查询中的:user_id占位符,以指定要删除哪个用户的数据。
要同时删除虚拟角色文件,您需要从user_option表中获取文件名,然后使用编程语言的文件系统函数删除这些文件。
例如,您可以执行以下操作:

// Delete avatar files
$avatar_files = ORM::for_table('user_option')
    ->select('user_value')
    ->where('user_id', $user_id)
    ->where('user_option', 'avatar')
    ->find_one();

if ($avatar_files) {
    // Split the file names into an array
    $files = explode(',', $avatar_files['user_value']);

    // Delete each file
    foreach ($files as $file) {
        unlink('/path/to/avatar/directory/' . $file);
    }
}

// Delete user data
ORM::for_table('user')
    ->where('user_id', $user_id)
    ->delete

相关问题