【问题标题】:Assigning SELECT Results in Nested sql SELECT Statement to variables - PHP将嵌套 sql SELECT 语句中的 SELECT 结果分配给变量 - PHP
【发布时间】:2015-02-21 08:12:24
【问题描述】:

在 PHP-MySQL 中,我使用如下嵌套的 select 语句:

SELECT object_id FROM form_entry WHERE id=(SELECT entry_id FROM form_entry_values WHERE value='32711178-888' AND field_id = (SELECT id FROM form_field WHERE name='dealer'))

每个 SELECT 只返回一个单元格作为结果。但是,我需要这些 SELECT 的每个结果,例如我需要(深度 3):

SELECT id FROM oform_field WHERE name='dealer'

我也需要(深度 2):

SELECT entry_id FROM form_entry_values WHERE value='32711178-888' AND field_id = (SELECT id FROM form_field WHERE name='dealer')

我需要(深度 1):

SELECT object_id FROM form_entry WHERE id=(SELECT entry_id FROM form_entry_values WHERE value='32711178-888' AND field_id = (SELECT id FROM form_field WHERE name='dealer'))

有没有办法在只执行一次最大的 SQL 查询(表示为“深度 1”)期间分配这些语句的结果?换句话说,在不执行三个 sql 查询的情况下,我正在寻找一种将每个深度中的 SELECT 语句的结果分配给 $result_1、$result_2 等变量的方法。

听起来没有办法处理它,但提前谢谢...

【问题讨论】:

    标签: php mysql sql nested-queries


    【解决方案1】:

    您的查询等同于:

    SELECT e.object_id
    FROM form_entry e
      INNER JOIN form_entry_values v ON e.id=v.entry_id
      INNER JOIN form_field f ON v.field_id = f.id
    WHERE v.value='32711178-888' 
      AND f.name='dealer'
    

    在这种形式下,答案很简单:只需将v.entry_idf.id 添加到SELECT 子句的表达式列表中:

    SELECT e.object_id, v.entry_id, f.id
    FROM form_entry e
      INNER JOIN form_entry_values v ON e.id=v.entry_id
      INNER JOIN form_field f ON v.field_id = f.id
    WHERE v.value='32711178-888' 
      AND f.name='dealer'
    

    【讨论】:

    • 我怎么想不到呢? :) 这是我欣赏的解决方案。非常感谢。
    【解决方案2】:

    尝试类似:

    SELECT depth1.object_id, depth2.entry_id, depth3.id
    FROM form_entry depth1
    JOIN form_entry_values depth2 ON depth1.id=depth2.entry_id
    JOIN form_field depth3 ON depth3.id=depth2.entry_id
    WHERE
    depth2.value='32711178-888'
    AND depth3.name='dealer';
    

    【讨论】:

      猜你喜欢
      • 2017-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-26
      • 2022-12-31
      • 1970-01-01
      • 2011-09-09
      • 2014-12-04
      相关资源
      最近更新 更多