0

Zend Framework を使用して Web サイトを開発しています。バックエンド データベースは MySQL です。次の SQL をコピーして phpMyAdmin に貼り付けると、エラーなしで実行されます。ただし、Zend Framework 上で実行できるように、いくつかのサブクエリを使用してそのような SQL を変換できませんでした。

update 
    tb_data_proposal_crpf_reviewer
set
    is_commented = 0
where
    id IN (
    select 
        t.id
    from
        (
        select
            r.id as id
        from
            tb_data_proposal_crpf_reviewer r
            left join tb_data_panel_member m on m.id = r.panel_member_id
        where
            r.proposal_crpf_id = :crpf_id and
            r.is_commented = 1 and
            m.panel_code IN (
                select
                    distinct(s.panel_code)
                from
                    tb_data_proposal_crpf_stage s
                where
                    s.proposal_crpf_id = :crpf_id and
                    s.crp_stage_code = 1
            )
        ) as t
)
4

3 に答える 3

0

ここでマインドロックの答えを見てください。サブクエリを使用してうまくいきました。あなたにも役立つことを願っています

zend-framework-zend-db-select-how-to-join-custom-subquery-table

于 2013-02-10T02:15:38.883 に答える
0

すべてのサブクエリにはエイリアスが必要なので、これを更新してみてください:

    where
        s.proposal_crpf_id = :crpf_id and
        s.crp_stage_code = 1
)

    where
        s.proposal_crpf_id = :crpf_id and
        s.crp_stage_code = 1
) as u
  ^^^^
于 2013-02-09T14:54:46.220 に答える
0

この最初のクエリで 2 番目のクエリと同じ結果が得られる場合は、ロジックを分割して、まず影響を受けるすべての ID をロードし、次に通常の Zend の方法で更新を行うことができます。

残念ながら、最初のクエリを確認できません。

最初:

select
  distinct(r.id) as id
from
  tb_data_proposal_crpf_reviewer AS r
  left join tb_data_panel_member AS m
    on
      m.id = r.panel_member_id
        and
      m.panel_code = r.panel_code
where
  r.proposal_crpf_id = :crpf_id
    and
  r.is_commented = 1
    and
  r.crp_stage_code = 1

2番目:

select
    r.id as id
from
    tb_data_proposal_crpf_reviewer r
    left join tb_data_panel_member m on m.id = r.panel_member_id
where
    r.proposal_crpf_id = :crpf_id and
    r.is_commented = 1 and
    m.panel_code IN (
        select
            distinct(s.panel_code)
        from
            tb_data_proposal_crpf_stage s
        where
            s.proposal_crpf_id = :crpf_id and
            s.crp_stage_code = 1
    )
) as t
于 2013-02-09T15:00:04.377 に答える