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