问题就在这里。我有一个看起来有点像这样的 MySQL 数据库:
Table: db1.group_a
-----------
| name |
-----------
| Alice |
| Charlie |
-----------
Table: db2.group_b
----------
| name |
----------
| Debbie |
| Bob |
----------
(是的,每个表都在不同的数据库中。而且,实际的表具有相似但不同的结构,为了简单起见,我只使用一列。)
每个name
在两个数据库中仅出现一次。
现在我需要做的是找到一行(例如,Bob)并将其从其所在的表中删除。我正在考虑从 group_a
中删除然后检查受影响的行,然后执行某种 if (affected_row < 1) { try_in_next_table(); }
在 PHP 中。
但是完全在 MySQL 中完成此操作是理想的。有什么办法可以实现这一点吗?
最佳答案
以下是一些场景:
从所有数据库/表中批量删除:
DELETE FROM db1.group_a where name='Bob';
DELETE FROM db2.group_b where name='Bob';
或者查找实际的数据库/表,然后删除(php 脚本):
$db = new mysqli("localhost", "my_user", "my_password", "world");
$tables = array('db1.group_a','db2.group_b');
foreach ($tables as $t)
if ($query = $db->query("SELECT * from ".$t." WHERE name=".$db->escape_string("Bob")))
if ($query->num_rows>0) {
$db->query("DELETE FROM ".$t." WHERE name=".$db->escape_string("Bob"));
break; // break foreach
}
或删除而不选择:
$db = new mysqli("localhost", "my_user", "my_password", "world");
$tables = array('db1.group_a','db2.group_b');
foreach ($tables as $t)
if ($query = $db->query("DELETE FROM ".$t." WHERE name=".$db->escape_string("Bob"))
if ($query->affected_rows>0)
break; // break foreach
关于php - 从多个数据库的多个表中删除一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26230379/