Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从包含主键的表中删除行_Php_Mysql - Fatal编程技术网

Php 从包含主键的表中删除行

Php 从包含主键的表中删除行,php,mysql,Php,Mysql,我有两个名为distance和place的MySQL表,如下所示: 距离 放置 “id”是“距离”表的主键,“点”是“地点”表的主键“点”是“位置”表引用的“距离”表的外键。 我想从'place'表中删除点'A'的行,该行的id等于'1'。由于此外键是使用“on delete cascade constraint”创建的,因此还应删除place表的相关行。 这意味着,根据下表,应该删除距离表的第一行和位置表的第一行 这是我迄今为止在PHP代码下尝试的查询: mysql_query("delete

我有两个名为distance和place的MySQL表,如下所示:

距离

放置

“id”是“距离”表的主键,“点”是“地点”表的主键“点”是“位置”表引用的“距离”表的外键。 我想从'place'表中删除点'A'的行,该行的id等于'1'。由于此外键是使用“on delete cascade constraint”创建的,因此还应删除place表的相关行。 这意味着,根据下表,应该删除距离表的第一行和位置表的第一行

这是我迄今为止在PHP代码下尝试的查询:

mysql_query("delete p.point from place p where p.point IN SELECT * FROM (SELECT d.point FROM distance d GROUP BY d.point where d.id='1' )");
但是,这不会删除行。没有错误消息。 有人能帮我解决这个问题吗?

尝试在删除查询中使用内部联接:

尝试在删除查询中使用内部联接:

在WHERE in语句中使用*。如果要在中的何处使用,则只需选择ID。这是您的固定代码:

mysql_query("delete p from place p where p.point IN (SELECT p.point FROM (SELECT d.point FROM distance d GROUP BY d.point where d.id='1' ))");
但我不明白为什么要使用两个选择,当你可以这样做

mysql_query("delete p from place p where p.point IN (SELECT d.point FROM distance d GROUP BY d.point where d.id='1' )");
在WHERE in语句中使用*。如果要在中的何处使用,则只需选择ID。这是您的固定代码:

mysql_query("delete p from place p where p.point IN (SELECT p.point FROM (SELECT d.point FROM distance d GROUP BY d.point where d.id='1' ))");
但我不明白为什么要使用两个选择,当你可以这样做

mysql_query("delete p from place p where p.point IN (SELECT d.point FROM distance d GROUP BY d.point where d.id='1' )");
解决方案1: 查询中in子句之后缺少您

解决方案2:更好的选择是加入-

delete pl.* from place pl 
join distance dst on dst.point=pl.point 
where d.id=1;
解决方案3:最好的选择是从父表中删除,当您使用删除级联功能时,所有相关行将从子表中自动删除

DELETE FROM place WHERE `point`='A';
解决方案1: 查询中in子句之后缺少您

解决方案2:更好的选择是加入-

delete pl.* from place pl 
join distance dst on dst.point=pl.point 
where d.id=1;
解决方案3:最好的选择是从父表中删除,当您使用删除级联功能时,所有相关行将从子表中自动删除

DELETE FROM place WHERE `point`='A';
试着这样做

DELETE FROM place p
WHERE p.point IN (SELECT d.point 
                  FROM distance d 
                 WHERE d.id=1)
所以PHP查询应该是这样的

mysql\u查询“从位置p中删除,其中p.point在距离d中选择d.point,其中d.id=1”

您所做的子选择可能没有返回任何值,因此不会执行任何操作,也不会给出任何错误,因为查询已正确完成。

尝试执行此操作

DELETE FROM place p
WHERE p.point IN (SELECT d.point 
                  FROM distance d 
                 WHERE d.id=1)
所以PHP查询应该是这样的

mysql\u查询“从位置p中删除,其中p.point在距离d中选择d.point,其中d.id=1”

您所做的子选择可能没有返回任何值,因此不会执行任何操作,也不会给出任何错误,因为查询已正确完成。

请尝试以下操作:-

DELETE p.* FROM place p
INNER JOIN distance d ON p.point = d.point
WHERE d.id = 1;
试试这个:-

DELETE p.* FROM place p
INNER JOIN distance d ON p.point = d.point
WHERE d.id = 1;

mysql\u查询的折旧/删除取决于您的PHP版本-查看或mysql\u查询的折旧/删除取决于您的PHP版本-查看或我认为您不需要删除p。*可能只是从…删除p,我认为您不需要删除p。*可能只是从…删除p,这可以回答问题,最好提供一些关于此代码如何帮助的解释。如果您认为此答案有用,请加分为有用。虽然这可以回答问题,但最好提供一些关于此代码如何帮助的解释。如果您认为此答案有用,请加分为有用。