count distinct并更新另一个表,其中postnr =“count distinct”

时间:2014-02-09 15:27:03

标签: php mysql pdo

表1:

    postnr
    ------
    11111
    11111
    11111
    22222
    33333
    33333

表2:

    postnr    count
   --------  -------
    11111     ?
    22222     ?
    33333     ?
    44444     ?

我想要做的是用表1中每个postnr的计数更新表2。

因此,在这种情况下,11111的计数为3,对于22222,它将为1,对于33333,它将为2。

这些表位于不同的数据库中,这是我徒劳的尝试,但它没有在表2中产生任何计数......

    $pdo1 = new PDO('mysql:host='.DB_SERVER.';dbname='.DB_NAME_PROFILDATA, DB_USER, DB_PASS);
    $pdo1->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
    $pdo2 = new PDO('mysql:host='.DB_SERVER.';dbname='.DB_NAME, DB_USER, DB_PASS);
    $pdo2->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
    try {
    foreach ($pdo1->query("SELECT 
                            count(DISTINCT postnr) as pstnr,
                            postnr as postnumret
                        FROM XXX") as $row) {
                            $count = $row['pstnr'];
                            $postnumret = $row['postnumret'];
            $result = $pdo2->prepare("UPDATE YYY
                                        SET a1_ant = '$count' 
                                        WHERE postnummer = $postnumret");
            $result->execute();
    }
}
catch(PDOException $e) {  
     echo $e->getMessage(); 
} 

我正在使用php,pdo和mysql。

2 个答案:

答案 0 :(得分:0)

您可以通过查询执行此操作,无需记下代码。 看看我为你做的this sample

select val, count(val) from t1 group by val;
insert into t2 
select val as vals, count(val) as int from t1 group by val;

select * from t2;

答案 1 :(得分:0)

不确定您是否在寻找查询。但是使用下面的sql查询你也可以这样做。

update tab2 set 
count = 
(select count(postnr) 
 from table1 
 where postnr = tab2.postnr 
 ) 

在此处查看演示小提琴http://sqlfiddle.com/#!2/04d586/1