如果feildx = 123,则删除数据库中任何表中的任何记录

时间:2010-07-29 18:31:27

标签: php mysql

是否有一个mysql statemnet遍历数据库中的每个表,并说如果applicationid = 123或schoolid = 123或familyid = 123删除整个记录?我需要编写一个可以执行此操作的PHP脚本。

4 个答案:

答案 0 :(得分:3)

SELECT TABLE_NAME, GROUP_CONCAT(DISTINCT COLUMN_NAME SEPARATOR ',') AS columns 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'yourdatabasename' 
AND COLUMN_NAME IN ('applicationid', 'schoolid', 'familyid')
GROUP BY TABLE_NAME

结果将是每个表的数组,以及它所拥有的列(仅来自`applicationid,schoolid,familyid的集合)作为逗号分隔字段。

foreach ($results as $result) {
    $cols = explode(',', $result['columns']);
    foreach ($cols as &$col) {
        $col .= ' = 123';
    }
    $sql = 'DELETE FROM '. $result['TABLE_NAME'].
        ' WHERE ' . implode(' OR ', $cols);
}

这将为每个表生成一个查询,如:

DELETE FROM table1 WHERE applicationid = 123 OR schoolid = 123

它只包括表格中的字段......

答案 1 :(得分:1)

这不是一个单一的陈述。 您可以从information_schema数据库中获取表名列表,然后使用存储过程或外部脚本循环遍历它并删除这些行。

以下是有关information_schema表的参考资料。 http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

答案 2 :(得分:0)

首先使用SHOW TABLES获取表格列表,然后遍历表格列表并使用DELETE FROM tablename WHERE field=?

重要提示:您应该拥有使用SHOW TABLES

的权限

答案 3 :(得分:0)

怎么样

$showtablequery = "
SHOW TABLES
FROM
[database]
";

$ X = '0'; $ showtablequery_result = mysql_query($ showtablequery); while($ r = mysql_fetch_array($ showtablequery_result)) {     $ query =“DELETE FROM $ r [$ x] WHERE applicationid = 123 OR schoolid = 123 OR familyid = 123“; $ X ++ }