这就是问题所在。我有一个看起来像这样的MySQL数据库:
Table: db1.group_a
-----------
| name |
-----------
| Alice |
| Charlie |
-----------
Table: db2.group_b
----------
| name |
----------
| Debbie |
| Bob |
----------
(是的,每个表都在不同的数据库中。而且,实际的表有相似但不同的结构,为简单起见我只使用一列。)
每个name
在两个数据库中只出现一次。
现在我需要做的是找到一行(例如,Bob)并从它所在的表中删除它。我想从group_a
删除然后检查对于受影响的行,然后在php中进行某种if (affected_row < 1) { try_in_next_table(); }
。
但完全在MySQL中这样做是理想的。无论如何要实现这个目标吗?
答案 0 :(得分:1)
以下是几种情况:
从所有数据库/表中批量删除:
DELETE FROM db1.group_a where name='Bob';
DELETE FROM db2.group_b where name='Bob';
或者查找实际的db / table然后删除(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