0

私はワードプレスの表1を持っています

wp_term_relationships (
   object_id bigint(20),
   term_taxonomy_id bigint(20),
   term_order int(11)
)

および表2

 wp_test (
    object_id bigint(20),
    term_taxonomy_id bigint(20)
)

今、私はとしてwp_term_relationshipsの値で更新しようとしていますwp_test

update ignore wp_term_relationships m1 
inner join wp_test m2
on (m1.term_taxonomy_id = m2.term_taxonomy_id)
set m1.object_id = m2.object_id

ただし、のすべての値がwp_testに更新されるわけではありませんwp_term_relationships

から値を挿入してみwp_testましたwp_test_relationships

インサートを使用して

insert ignore into wp_term_relationships(object_id, term_taxonomy_id)
select object_id, term_taxonomy_id from wp_test

ただし、対応する値が0の値、または term_taxonomy_id対応する値が0の値を更新するだけです。object_idobject_idterm_taxonomy_id

wp_testこれらの2つの列をからに転送するにはどうすればよいですか?wp_term_relationships

4

2 に答える 2

2

私はあなたが必要としているのは、代わりにINSERT なし IGNOREとありであると思います: ON DUPLICATE KEY UPDATE

INSERT INTO 
  wp_term_relationships (object_id, term_taxonomy_id)
SELECT 
  object_id, 
  term_taxonomy_id 
  FROM wp_test
ON DUPLICATE KEY UPDATE 
  wp_term_relationships.term_taxonomy_id = VALUES(term_taxonomy_id)

これは、wp_term_relationships.object_idに一意の制約があることを前提としていることに注意してください

別のケースに合わせて編集:

「重複」を構成するのが2つの列の明確な組み合わせであることを意味する場合は、MySQLの2つの列に一意の制約を追加してから、INSERT IGNOREクエリを使用する必要があります。

ALTER TABLE wp_term_relationships ADD UNIQUE (object_id, term_taxonomy_id);
于 2012-08-24T19:25:44.553 に答える
0
UPDATE wp_term_relationships m1, wp_test m2
SET m1.term_taxonomy_id = m2.term_taxonomy_id
WHERE m1.object_id = m2.object_id;

テーブルは「object_id」という列でリンクされていると思います。

于 2012-08-24T19:46:02.593 に答える