Php 使用联接的Sql更新失败

Php 使用联接的Sql更新失败,php,mysql,sql,Php,Mysql,Sql,我有这个查询,现在返回一个错误,显示“您的SQL语法有错误;请检查与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在第1行的“FROM Sales JOIN Sales ON Inventory.saleID=Sales.ID JOIN Customers ON Sales.custo”中使用 这是我的查询。我知道我没有使用别名,所以看起来很难看,但语法似乎正确,我传递的变量不是空的,我已经回显了它们 $sql = "UPDATE Sales SET salequantity='$

我有这个查询,现在返回一个错误,显示“您的SQL语法有错误;请检查与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在第1行的“FROM Sales JOIN Sales ON Inventory.saleID=Sales.ID JOIN Customers ON Sales.custo”中使用

这是我的查询。我知道我没有使用别名,所以看起来很难看,但语法似乎正确,我传递的变量不是空的,我已经回显了它们

 $sql = "UPDATE Sales SET salequantity='$takeCount' 
       FROM `Sales` 
       JOIN Sales ON Inventory.saleID=Sales.ID 
       JOIN Customers ON Sales.customerID=Customers.ID 
       JOIN Products ON Inventory.productID = Products.ID 
      JOIN Categories ON Products.categoryID=Categories.ID 
      WHERE Customers.ID='$customersID' AND Products.ID='$id'";
这是我的模式

CREATE TABLE Categories
(
ID int NOT NULL auto_increment,
type varchar(255),
description varchar(255),
PRIMARY KEY (ID)
);

CREATE TABLE Products
(
ID int NOT NULL auto_increment,
categoryID int,
customerID int,
name varchar(255),
description varchar(255),
price float(10),
quantity int(10),
PRIMARY KEY (ID),
FOREIGN KEY (categoryID) REFERENCES Categories(ID)
);
CREATE TABLE Customers
(
ID int NOT NULL auto_increment,
productID int,
name varchar(255),
street varchar(255),
city varchar(255),
state varchar(255),
zip int(8),
username varchar(255),
password varchar(255),
confirm_password varchar(255),
phone varchar(255),
PRIMARY KEY (ID),
);

CREATE TABLE Sales
(
ID int NOT NULL auto_increment,
customerID int,
amount float(15),
salequantity int(10),
PRIMARY KEY (ID),
FOREIGN KEY (customerID) REFERENCES Customers(ID)
);

CREATE TABLE Inventory
(
productID int,
saleID int,
FOREIGN KEY (productID) REFERENCES Products(ID),
FOREIGN KEY (saleID) REFERENCES Sales(ID)
);
这是最后一个查询。只想让这个简单的查询起作用

UPDATE Sales  INNER JOIN Sales ON Inventory.saleID=Sales.ID SET salequantity=2 where Sales.customerID=1 AND Inventory.productID=1;
从第一条注释运行查询,也失败

UPDATE Sales SET salequantity=5 FROM Sales JOIN Inventory ON Inventory.saleID=Sales.ID JOIN Customers ON Sales.customerID=Customers.ID JOIN Products ON Inventory.productID = Products.ID JOIN Categories ON Products.categoryID=Categories.ID where Customers.ID=1 AND Products.ID=1;
解决方案 聚合函数这个函数非常有效

$customerProducts = mysql_query("select Products.ID, Products.name, Products.description, Products.quantity,Products.price, Categories.type, Sales.ID, Sales.customerID, Sales.amount, Sales.salequantity, Inventory.productID, Inventory.saleID, Customers.ID, Customers.productID, COUNT(Products.name) AS productsCount from(((( Inventory INNER JOIN Sales ON Inventory.saleID=Sales.ID) JOIN Customers ON Sales.customerID=Customers.ID) JOIN Products ON Inventory.productID = Products.ID) JOIN Categories ON Products.categoryID=Categories.ID) where Customers.ID ='$customersID' GROUP BY Products.name");

模式

create table sales (id varchar(10), customerid varchar(10), salequantity varchar(10))
create table Inventory (id varchar(10), productID varchar(10), saleID varchar(10))
create table Customers (id varchar(10))
create table Products (id varchar(10), categoryID varchar(10))
create table Categories (id varchar(10))
已更正的查询

UPDATE Sales SET salequantity='$takeCount' 
  FROM Sales JOIN Inventory ON Inventory.saleID=Sales.ID
             JOIN Customers ON Sales.customerID=Customers.ID
             JOIN Products ON Inventory.productID = Products.ID
             JOIN Categories ON Products.categoryID=Categories.ID
  where Customers.ID='$customersID' AND Products.ID='$id'
输出

(受影响的0行)

更改为查询

UPDATE Sales SET salequantity='$takeCount' 
  FROM Sales JOIN Inventory ON Inventory.saleID=Sales.ID
             JOIN Customers ON Sales.customerID=Customers.ID
             JOIN Products ON Inventory.productID = Products.ID
             JOIN Categories ON Products.categoryID=Categories.ID
  where Customers.ID='$customersID' AND Products.ID='$id'
在第一次联接中,实际查询类似于“FROM
Sales
join Sales ON Inventory.saleID=Sales.ID”,将其更正为“FROM
Sales
在Inventory.saleID=Sales.ID.上加入Inventory。不清楚您想要的输出到底是什么。但是上面的查询将解决编译错误

$customerProducts = mysql_query("select Products.ID, Products.name, Products.description, Products.quantity,Products.price, Categories.type, Sales.ID, Sales.customerID, Sales.amount, Sales.salequantity, Inventory.productID, Inventory.saleID, Customers.ID, Customers.productID, COUNT(Products.name) AS productsCount from(((( Inventory INNER JOIN Sales ON Inventory.saleID=Sales.ID) JOIN Customers ON Sales.customerID=Customers.ID) JOIN Products ON Inventory.productID = Products.ID) JOIN Categories ON Products.categoryID=Categories.ID) where Customers.ID ='$customersID' GROUP BY Products.name");

这正是我想要的。我试图让它变得复杂,而忘记了聚合。

我可能错了,但集合在一个join之后出现。请创建一个fiddleschema@JustinWeinzimmer另外,请用确切的查询完成您的问题请注意,表别名在自我更新中占主导地位。您需要o将该表引用为其他别名刚才尝试了该查询,但得到了相同的错误。这是我在mysql UPDATE Sales SET salequantity=5中使用的内容,来自库存上的销售加入库存。saleID=Sales.ID在销售上加入客户。customerID=Customers.ID在库存上加入产品。productID=Products.ID在产品上加入类别。categoryID=Categoris.ID其中Customers.ID=1和Products.ID=1i表示抗议。为什么要以这种方式更新销售。销售应该有一个插入。销售是插入的,而不是更新:>插入已经发生。我需要使用每次销售中的产品计数更新数量,因此我进行了计数,现在使用每个saleset将其设置在插入上。这是一个q数据库状态的查询。即使是暂时的,您也会使数据库出错