从多个数据库中的多个表中删除单个行

时间:2014-10-07 07:07:00

标签: php mysql

这就是问题所在。我有一个看起来像这样的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中这样做是理想的。无论如何要实现这个目标吗?

1 个答案:

答案 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