用PHP更新mysql数据库表

时间:2015-04-09 22:23:24

标签: php mysql mysqli

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

这是我的表:

|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的条目,但第三行的时间是最新的。

更新后表格应如下所示:

|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)";

“更新记录时出错:您无法在FROM子句中为更新指定目标表'MY_DATABASE_TABLE'”

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

1 个答案:

答案 0 :(得分:0)

您可以使用带有LEFT JOIN的UPDATE:

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的行,或者是具有最大日期的行。

请查看小提琴here