2014-10-07 123 views
0

这是问题所在。我有一个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中完成的理想选择。无论如何要完成这个?

+0

我认为你使用'外键'概念来建立你的表之间的关系 – 2014-10-07 07:35:11

+0

@kushalsuthar不,表没有关系。这只是多个表做同样的工作。这是如何在我的工作场所实施的,请不要问为什么。 – starleaf1 2014-10-07 07:59:38

回答

1

这里有几个可能性:

大部分来自所有数据库/表中删除:

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 
+0

是的。我认为这涵盖了它。 – starleaf1 2014-10-07 08:04:21