首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >php mysql仅在if语句中存在重复项的情况下更新列

php mysql仅在if语句中存在重复项的情况下更新列
EN

Stack Overflow用户
提问于 2021-09-07 07:38:15
回答 2查看 62关注 0票数 0

我有一个似乎无法解决的问题。我在编程方面有点新手,所以它可能真的很容易,但我找不到任何东西。我有一个很大的数组,我循环通过它,如果有重复项,需要在名为address_correct的列中将它们设置为false。下面是我的代码:

代码语言:javascript
复制
    $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之后,以确保只更新重复项。有人能帮我解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-07 07:53:18

有多种方法可以实现这一点,但我不确定您的最终目标是什么。删除重复项的最简单方法是创建一个新表,并将所有唯一记录插入到该新表中,如下所示:

代码语言:javascript
复制
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.  

最后,在查看之后,您可以删除旧的表并重命名新的表:

代码语言:javascript
复制
DROP TABLE adresfix;  
ALTER TABLE address_unique RENAME TO adresfix;  
票数 0
EN

Stack Overflow用户

发布于 2021-09-07 10:03:04

好的,根据多个列(假设),获取所有重复行的select查询是:

代码语言:javascript
复制
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
)

现在,如果要更新这些行,则应将此查询作为子查询或联接查询添加到更新查询中。示例:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69084147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档