以下每一行都是单独工作的,但我想将它们合并为一个查询。
$query4="DELETE FROM a WHERE email = '$email'";
$query2="DELETE FROM b WHERE email = '$email'";
$query3="DELETE FROM c WHERE email = '$email'";
$query1="DELETE FROM d WHERE email = '$email'";
$result = mysqli_query($con, $query[1-4, depending]) or die(mysqli_error($con));
我尝试了很多不同的方法。从MySQL文档中,它应该如下:
$query="DELETE FROM a, b, c, d WHERE email = '$email'";
$result = mysqli_query($con, $query) or die(mysqli_error($con));
我也用反引号尝试过,如:
$query="DELETE FROM `a`, `b`, `c`, `d` WHERE email = '$email'";
我尝试将单独的四行连接成一个长的分号分隔的字符串。
除了四条单独的行之外的所有内容都会给我一个SQL语法错误:
您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在#< WHERE email =' xxxxxx@yyyyyyyyy.com''在第1行。
我检查了db用户是否具有DELETE权限(当然,他们这样做,因为它在单独运行时工作正常)。
在单独的陈述中这样做相对简单,但我感到有点困惑,为什么它在这一点上不起作用。想要解决这个问题只是为了好奇。
我确实发现mysqli_multi_query()
命令...是" ... a,b,c,d ......"部分被mysqli视为单独的查询?
感谢您提供的任何帮助! (请注意,由于它连接正常,我已经省略了数据库连接线。)再次......谢谢!
答案 0 :(得分:2)
根据OP的要求:
" @ Fred-ii-谢谢,这很有用。我连接了单独的语句,而不是尝试编写一个,然后使用mysqli_multi_query。如果您想将此作为答案,我很乐意将其标记出来!"
是的,请使用multi_query
而不是$query1, $query2
等。正如手册所示,将其连接起来。
对所有这些使用$query .=
,但不要在第一个使用点。
答案 1 :(得分:1)
你可以用
做到这一点DELETE a, b, c, d
FROM a
LEFT JOIN b ON a.email = b.email
LEFT JOIN c ON a.email = c.email
LEFT JOIN d ON a.email = d.email
WHERE a.email = '$email'
USING有第二种语法:
DELETE FROM a, b, c, d
USING a
LEFT JOIN b ON a.email = b.email
LEFT JOIN c ON a.email = c.email
LEFT JOIN d ON a.email = d.email
WHERE a.email = '$email'
也应该有用。
注意强>
要求:要删除的电子邮件必须在表a中至少有一行。
请参阅DELETE语法文档:
对于第一个多表语法,只匹配来自的行 删除FROM子句之前列出的表。第二个 多表语法,仅匹配中列出的表中的行 FROM子句(在USING子句之前)被删除。效果是 您可以同时从多个表中删除行并具有 另外只用于搜索的表:
删除t1,t2 FROM t1 INNER JOIN t2 INNER JOIN t3 WHERE_1.id = t2.id AND t2.id = t3.id;
答案 2 :(得分:0)
实际上我们无法对MySQL执行“JOIN”删除操作。一个好方法就是将所有指令发送到同一个事务中,如下所示:
DELIMITER $$
DELETE FROM TABLE1 WHERE ...;
DELETE FROM TABLE2 WHERE ...;
DELETE FROM TABLE3 WHERE ...;
DELETE FROM TABLE4 WHERE ...;
...
DELIMITER $$