0

2 つのクエリがあります。最初は複数の行を返します:

SELECT parent_entry_id,child_entry_id FROM exp_playa_relationships WHERE parent_field_id = '34';

...そして、値 (parent_entry_id,child_entry_id) を使用してこのクエリに組み込み、'x' と 'y' を置き換えて、最初のクエリで返された各行に対して実行したいと思います。

UPDATE exp_channel_data AS t1,
(
SELECT field_id_46,field_id_47 FROM exp_channel_data WHERE entry_id = 'x') AS t2
SET t1.field_id_60 = t2.field_id_46, t1.field_id_61 = t2.field_id_47
WHERE t1.entry_id = 'y';

別の JOIN を使用する必要があると思いますが、私の例で JOIN を実装する方法がわかりません。どんな助けでも大歓迎です。

4

4 に答える 4

0

返信ありがとうございます。作業構文は次のとおりです。

UPDATE exp_channel_data AS t1,
(
SELECT 
entry_id as ei2, child_entry_id, parent_entry_id, field_id_46 as f46,field_id_47 as f47 
FROM 
exp_channel_data JOIN exp_playa_relationships ON entry_id=child_entry_id AND parent_field_id = 34) AS t2
SET t1.field_id_60 = f46, t1.field_id_61 = f47
WHERE t1.entry_id=parent_entry_id;
于 2012-05-23T11:14:14.423 に答える
0

このクエリを試してください

UPDATE exp_channel_data a1 INNER JOIN exp_playa_relationships a  ON a1.entry_id = a.child_entry_id
INNER JOIN exp_channel_data b ON a.parent_entry_id = b.entri_id 
SET a1.field_id_60 = b.field_id_46, ta1.field_id_61 = b.field_id_47
WHERE parent_field_id = '34'
于 2012-05-10T17:25:29.303 に答える
0

これがあなたが求めているものだと思います:

UPDATE exp_playa_relationships AS t0
  JOIN exp_channel_data        AS t1
    ON t1.entry_id = t0.child_entry_id
  JOIN exp_channel_data        AS t2
    ON t2.entry_id = t0.parent_entry_id
   SET t1.field_id_60 = t2.field_id_46
     , t1.field_id_61 = t2.field_id_47
于 2012-05-10T17:26:13.847 に答える
-1

または、より古典的な構文では、独自の foo および bar 属性に調整する必要がありますが、次のようなものを使用します。

update exp_channel_data t1
set (t1.field_id_60,t1.field_id_61) = (
    select t2.field_id_46 , t2.field_id_47
    from exp_channel_data t2
    where 1=1
      and t2.entry_id = 'x'
      and /* ENTER YOUR t1-t2 join condition here */
)
where 1=1
  and t1.entry_id = y
;

しかし、あなたはMySQLなので、複合サブクエリをサポートしているとは思いません。そのような:

update exp_channel_data t1
set t1.field_id_60 = (
    select t2.field_id_46 
    from exp_channel_data t2
    where 1=1
      and t2.entry_id = 'x'
      and /* ENTER YOUR t1-t2 join condition here */
) , t1.field_id_61 = (
    select t3.field_id_47
    from exp_channel_data t3
    where 1=1
      and t3.entry_id = 'x'
      and /* ENTER YOUR t1-t3 join condition here */
)
where 1=1
  and t1.entry_id = y
;
于 2012-05-10T17:30:07.120 に答える