我有一个似乎无法解决的问题。我在编程方面有点新手,所以它可能真的很容易,但我找不到任何东西。我有一个很大的数组,我循环通过它,如果有重复项,需要在名为address_correct的列中将它们设置为false。下面是我的代码:
$sql1 = "SELECT street, entity_id FROM adresfix";
$arraycorrect = [];
$arrayincorrect = [];
$i = 0;
$db_query = $db->query($sql1);
$adres_rows = $db_query->fetch_all();
var_dump($adres_rows);
foreach ($address_rows as $address) {
if (in_array($address_rows[$i][0] , $arraycorrect)){
echo "Good";
array_push($arrayincorrect, $address_rows[$i][0]);
$sql = "UPDATE adresfix SET address_correct = 'false' WHERE";
} else {
array_push($arraycorrect, $address_rows[$i][0]);
echo "False";
}
$i++;
}我不知道应该把什么放在sql查询的where之后,以确保只更新重复项。有人能帮我解决这个问题吗?
发布于 2021-09-07 07:53:18
有多种方法可以实现这一点,但我不确定您的最终目标是什么。删除重复项的最简单方法是创建一个新表,并将所有唯一记录插入到该新表中,如下所示:
CREATE TABLE adress_unique LIKE adresfix;
INSERT INTO address_unique
SELECT * FROM adresfix
GROUP BY street,number,city; // Combination of columns that contains duplicate values. 最后,在查看之后,您可以删除旧的表并重命名新的表:
DROP TABLE adresfix;
ALTER TABLE address_unique RENAME TO adresfix; 发布于 2021-09-07 10:03:04
好的,根据多个列(假设),获取所有重复行的select查询是:
SELECT * FROM adresfix AS a1
INNER JOIN adresfix AS a2
WHERE (
a1.street = a2.street
AND
a1.number = a2.number
AND
a1.city = a2.city
)现在,如果要更新这些行,则应将此查询作为子查询或联接查询添加到更新查询中。示例:
UPDATE adresfix
SET address_correct = false
WHERE entity_id IN (
SELECT entity_id FROM (
SELECT a1.entity_id
FROM adresfix AS a1
INNER JOIN adresfix a2
WHERE (
a1.street = a2.street
AND
a1.number = a2.number
AND
a1.city = a2.city
)
) AS foo
)看看这个小提琴:http://sqlfiddle.com/#!9/8899eb/2
https://stackoverflow.com/questions/69084147
复制相似问题