1

リモートサーバーに大きなテーブルがあり、ローカルマシンのコピーをフラットディスクファイルに保存したいと考えています。テーブルの最初の行からローカルに読み取られたシリアル番号の記録を保持している場合、行id = 0 <>の列の内容がローカルに保存されている場合、SELECTコマンドを発行してテーブル内のすべての行を返すことができますか?シリアルナンバー?

何かのようなもの

SELECT * FROM 1_makes WHERE IF id@0<> local_serial

それが理にかなっていることを願っています

delimiter $$

CREATE TABLE `1_makes` (
  `id` int(11) NOT NULL,
  `make` varchar(20) DEFAULT NULL,
  `allow_global_disc` tinyint(4) DEFAULT NULL,
  `home_text` text,
  `pack_home_text` text,
  `update_ref` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$

したがって、私が欲しいのは、id=0およびupdate_refの行の内容がローカルに保存された値と異なる場合にのみテーブル全体が返されることです。

結果が得られたら、データが変更されていることがわかっているので、データをローカルディスクファイルに保存して、読み取ったupdate_refを更新できます。

これは私が必要なもののように見えます

列update_refを削除し、更新値をmake列@ id=0に配置しました

SELECT * FROM 1_makes WHERE(SELECT IF(make <>'my update number'、1、0)FROM 1_makes WHERE id = 0)

これは機能します。IF(make <>'my update number'、1、0)で1、0の数字が何に関連しているかを尋ねたかっただけです。

4

1 に答える 1

1

別のクエリを発行することで、おそらくあなたのケースはより適切に処理されるでしょう。アプリケーションは、最初に id=0 の行の値を照会し、次にそれに基づいて処理を進めます。

ただし、サブクエリを使用してこれを実現できます。

SELECT *
FROM 1_make
WHERE (SELECT IF(update_ref <> :my_number, 1, 0) FROM 1_make WHERE id = 0)

または内部結合:

SELECT t1.*
FROM 1_make t1
INNER JOIN 1_make t2
  ON t2.id = 0 AND t2.update_ref <> :my_number

ただし、結果があるかどうかをテストするだけの場合は、未使用の値を返すのではなく、カウントを返すことをお勧めします。

SELECT COUNT(*)
FROM 1_make
WHERE (SELECT IF(update_ref <> :my_number, 1, 0) FROM 1_make WHERE id = 0)

あるいは、LIMIT を使用して最初の行の後で停止することもできます。

SELECT id
FROM 1_make
WHERE (SELECT IF(update_ref <> :my_number, 1, 0) FROM 1_make WHERE id = 0)
LIMIT 1

または、さらに良いことに、IF の戻り値を使用するだけです。

SELECT IF(update_ref <> :my_number, 1, 0)
FROM 1_make
WHERE id = 0

さらに良いことに、すべての行の update_ref の値を保存する必要はありません。それを独自のテーブルに移動してみませんか。

SELECT IF(update_ref <> :my_number, 1, 0)
FROM my_settings

IF ステートメントは、false を意味する 0、または true を意味する 1 を返します。

最後に、id が増分値である場合は、代わりに、格納された最後の値よりも大きい id の行を検索してみませんか。

SELECT id
FROM 1_make
WHERE id > :my_number
LIMIT 1

また、これは更新を考慮していません。のみ、挿入します。

マスター サーバーから複製されたスレーブ サーバーを追加することを検討してください。次に、スレーブ サーバーのバックアップを自動化します。これは、ほとんどのバックアップが行われる方法です。

于 2012-07-10T16:42:38.103 に答える