用 PHP 更新 mysql 数据库 table

Update mysql database table with PHP

我的数据库有很多包含客户信息的列,其中一些是重复的。 我需要根据 IP 地址(已知)更新 table 的 "sale" 字段,但仅限于具有此类 IP 地址的最新条目。

这是我的 table:

|Sale |      IP     | Date     | 
+-----+-------------+----------+
|0    | 109.86.75.1 |2015-12-01|
|0    | 109.86.75.2 |2015-12-05|
|0    | 109.86.75.2 |2015-12-12|
|0    | 109.86.75.4 |2015-12-13|

假设我需要向 ip = 109.86.75.2 的客户添加更改, 我需要把第三行的Sale改成1,因为这个IP有两个条目,但是第三行的时间是最新的。

Table 更新后应如下所示:

|Sale |      IP     | Date     | 
+-----+-------------+----------+
|0    | 109.86.75.1 |2015-12-01|
|0    | 109.86.75.2 |2015-12-05|
|1    | 109.86.75.2 |2015-12-12|
|0    | 109.86.75.4 |2015-12-13|

我使用这样的PHP代码:

<?php
$servername=...;
$username=...;
$password=...;
$dbname=...;
$ipaddress="109.86.75.2";
$conn = new mysqli($servername, $username, $password, $dbname);
$sql="UPDATE MY_DATABASE_TABLE 
SET Sale='1'
WHERE ip_address = '$ipaddress' AND //Don't know what to add here in where condition... 

if ($conn->query($sql) === TRUE) {
echo "Record updated successfully";
} 
else {
echo "Error updating record: " . $conn->error;
}

$conn->close();
?>

我在 AND 之后尝试了这个,但它不起作用:

date IN (SELECT max(date) FROM MY_DATABASE_TABLE)";

"Error updating record: You can't specify target table 'MY_DATABASE_TABLE' for update in FROM clause"

非常感谢您的帮助! 提前致谢!

您可以使用带有 LEFT JOIN 的更新:

UPDATE
  MY_DATABASE_TABLE t1 LEFT JOIN MY_DATABASE_TABLE t2
  ON t1.ip_address=t2.ip_address
     AND t1.date<t2.date
SET
  t1.Sale='1'
WHERE
  t1.ip_address = '109.86.75.2'
  AND t2.date IS NULL
当连接不成功时,

t2.date 为 NULL:该行是唯一具有 ip_address 的行,或者是具有最大日期的行。

请看一个fiddle here.