0

我正在使用 Zend Framework 开发一个网站。后端数据库是 MySQL。当我将以下 SQL 复制并粘贴到 phpMyAdmin 时,它的执行没有任何错误。但是,我无法将这样的 SQL 转换为带有多个子查询,因此它可以在 Zend Framework 之上运行。

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

所有子查询都需要有一个别名,因此请尝试更新:

    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

如果第一个查询给出的结果与第二个查询相同,您可以拆分逻辑以首先加载所有受影响的 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

第二:

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 回答
0

在这里查看 Mindlock 的答案,它使用子查询对我有用,希望它也能帮助你

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

于 2013-02-10T02:15:38.883 回答