1

すべての列で有効な条件でMySqlの単一のクエリを使用して複数の列を更新したいと思います。

同じテーブル構造を持つデータベースが約25あります。phpMyAdminStatusを使用した単一のクエリを使用して、特定のURLのすべてのデータベースで名前が付けられたフィールドを更新する必要があります。

現在、このクエリを使用しています。(これらのデータベースのすべてに設定status=2する必要があります)table1url'www.google.com'

UPDATE  `database1`.`table1` as p1,
    `database2`.`table1` as p2 ,
    `database3`.`table1` as p3
SET  p1.`STATUS` = 2,
    p2.`STATUS`= 2,
    p3.`STATUS`= 2 
WHERE p1.url='www.google.com' and
    p1.url=p2.url=p3.url

ただし、だけでなくすべての行のデータを更新していますurl='www.google.com'。でも更新status=2'www.yahoo.com'です。

これを解決するのを手伝ってください。

4

1 に答える 1

5

これはあなたが望むものです:

UPDATE
    database1.table1 AS p1
    LEFT JOIN database2.table1 AS p2 USING (url)
    LEFT JOIN database3.table1 AS p3 USING (url)
SET
   p1.`STATUS` = 2,
   p2.`STATUS` = 2,
   p3.`STATUS` = 2
WHERE
    url = 'www.google.com';

一致しなかったものすべてに対して=>FALSEと評価p1.url=p2.url=p3.url
されp1.url=(p2.url=p3.url) たため、機能しませんでした。(p2.url=p3.url)p1.url=FALSE

比較p1.url=FALSE=>文字列をブール値と比較し、文字列を整数に変換すると、数値以外の文字列の場合は0になり、ブール値のFALSEを整数に変換すると0も得られます。p1.url=FALSE

p1.url=p2.url=p3.url同じですNOT p2.url=p3.url

したがって、コードは、すべてのp3.urlと等しくないp2.urlが存在するすべての行を更新します。

于 2012-08-08T11:54:29.483 に答える