如何将复杂的 SQL 查询转换为 Zend_Db_Select 语句?

2024-02-07

MySQL 网站有一个优秀的教程 http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/在数据库中存储分层数据。我正在尝试编写返回节点的直接子节点的查询。我不想只是从 MySQL 网站复制/粘贴查询,因为我试图以与数据库无关的方式处理此问题。

这是我尝试 Zend_Db_Select-ify 的查询

SELECT node.name, (COUNT(parent.name) - (sub_tree.depth + 1)) AS depth
FROM nested_category AS node,
    nested_category AS parent,
    nested_category AS sub_parent,
    (
        SELECT node.name, (COUNT(parent.name) - 1) AS depth
        FROM nested_category AS node,
        nested_category AS parent
        WHERE node.lft BETWEEN parent.lft AND parent.rgt
        AND node.name = 'PORTABLE ELECTRONICS'
        GROUP BY node.name
        ORDER BY node.lft
    )AS sub_tree
WHERE node.lft BETWEEN parent.lft AND parent.rgt
    AND node.lft BETWEEN sub_parent.lft AND sub_parent.rgt
    AND sub_parent.name = sub_tree.name
GROUP BY node.name
ORDER BY node.lft;

您可以尝试将查询分成两个Zend_Db_Select语句 - 父查询和子查询。您可以使用Zend_Db_Select对象作为参数from()方法,如下:

$mainQuery = $db->select();
$mainQuery->from('user');

$sub = $db->select();
$sub->from('company');

$mainQuery->from(array('subquery' => $sub));

你会得到这样的查询:

SELECT `user`.*, `sub`.* FROM `user` 
    INNER JOIN (
        SELECT `company`.* FROM `company`
    ) AS `sub`

如您所见,它会自动添加INNER JOIN当你添加第二个时from()- 但我认为,可以将您的查询重写为用户联接而不是多语法。所以你应该使用joinInner()方法,因为这样您就可以将连接条件指定为它的第二个参数。

请注意,该子查询与主查询类似,因此您可以构建主查询,将其克隆为子查询,这要归功于Zend_Db_Select可能性删除不必要的部分(reset()方法)并替换它们:

$mainQuery = $db->select(); //and rest
$subQuery = clone $mainQuery;
$subQuery->reset(Zend_Db_Select::WHERE);
$subQuery->where(); // and add valid conditions for subquery
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将复杂的 SQL 查询转换为 Zend_Db_Select 语句? 的相关文章

随机推荐

  • 如果在线更改数据,则更新表视图

    我们正在为酒店制作一个应用程序 我们已经制作了一个可以通过应用程序下订单的应用程序 所有这些订单都可以通过刷新页面在门户网站上看到 现在 客户要求创建一个应用程序 让服务员可以在他的 iPad 上查看订单 为此 我们将拥有一个表格视图 其中
  • MVCSiteMapProvider 面包屑导航不正确的父节点 ID

    我有这个站点地图
  • 有没有比 GDI GetPixel() 更快的替代方法?

    我在用着GetPixel 从 NET 应用程序中的 gdi32 dll 对屏幕上任意位置的像素颜色进行采样 它工作正常 但对我来说这是一个主要的性能瓶颈 有没有更快的方法 可以使用以下方式快速访问像素LockBits 的方法Bitmap 这
  • 如何生成从集合中选取的 n 个唯一元素的列表?

    如何生成n个列表unique值 Gen List T 使用 ScalaCheck 从一组值 不是生成器 中获取 这个帖子 https stackoverflow com questions 5107281 generating permut
  • HDF5:如何将数据附加到数据集(可扩展数组)

    依照指示本教程 http www hdfgroup org ftp HDF5 current src unpacked examples h5 extend c 我尝试扩展我的 HDF5 数据集 代码如下 但是数据未正确写入数据集 数据集具
  • 刷新我的网站的 Google 搜索结果 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我使用模板设置了一个网站 标题是他们默认提供的 当我搜索网站的标题时 它出现在结果中 但使用的是默认标题 几天前更改后 我的网站仍然显示默
  • 实体框架 6 代码优先:将字符串属性的 unicode 设置为 false

    在我的模型中 我有一些用 StringLength 属性装饰的实体 StringLength 128 public string FirstName get set 我还通过这种方式禁用所有字符串属性的 unicode protected
  • 任何能够处理左递归的 PEG 解析器? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 嗯 我知道可以重写语法来消除左递归 但这是一个非常无聊的过程 有时保持正确的关联性是非常不平凡的 是否有
  • 如何让主机网络与 docker swarm 模式配合使用

    From this PR https github com moby moby pull 32981 issuecomment 300883830最近被合并到 docker 的 17 06 候选版本中 我们现在支持带有 swarm 服务的主
  • 如何关闭 gcc 中的特定优化标志

    我想使用优化 O1 进行编译 但它打开了一个我不想使用的标志 我该如何关闭它 通常有一个等效的 否 标志 例如 fstrict aliasing可以通过以下方式关闭fno strict aliasing 检查 gcc 文档以获取更多标志
  • 嵌入式 cocos2d-js 应用程序可以回调 C++ 吗?

    我正在研究通过将 cocos2d js 作为视图嵌入现有 iOS 应用程序中来使用它的可能性 为了完成这项工作 我需要在 cocos2d 和周围的应用程序之间进行双向通信 经过一些初步调查 我确定可以致电in到 cocos 使用Script
  • C# 中的空参数检查

    在 C 中 是否有任何好的理由 除了更好的错误消息之外 向每个 null 不是有效值的函数添加参数 null 检查 显然 使用 s 的代码无论如何都会抛出异常 这样的检查会使代码变慢并且更难维护 void f SomeType s if s
  • BufferedReader.readLine() 不读取并挂起系统(等待)[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions BufferedReader rea
  • \n\r 是什么意思?

    当通过 java 从伪终端读取时 我在文本中看到 n r 那个代表是什么 注意它不是我熟悉的 r n n是换行符 ASCII 代码 10 r是回车符 ASCII 代码 13 不同的操作系统使用这些字符的不同组合来表示文本行的结尾 类Unix
  • Silverlight 4 程序集共享问题

    我有一个引用 Silverlight 4 类库的 WPF NET 4 0 类库 SL 库编译得很好 但是当我编译 WPF 类库时 我得到 Error 2 Unknown build error Cannot resolve dependen
  • 如何快速动态加载经常重新生成的c代码?

    我希望能够动态生成 C 代码并将其快速重新加载到我正在运行的 C 程序中 我在Linux上 这怎么办 Linux 上的库 so 文件可以在运行时重新编译和重新加载吗 是否可以在不生成 so 文件的情况下对其进行编译 编译后的输出是否可以以某
  • 循环访问多个正则表达式提取器输出

    您能告诉我如何循环遍历返回多个值的正则表达式后处理器的结果吗 Example JSON 响应消息 reply code 111 status SUCCESS customerID 222 a b 333 44 4 s 555 666 777
  • AssertionError IDEA 输出中的字符编码

    我正在使用 IntelliJ IDEA 12 0 4 进行一些测试 当我使用 JUnit4 框架运行一个时 我的断言错误如下所示 java lang AssertionError Status should be expected true
  • Apple 拒绝,因为 UIBackgroundModes = location

    我提交了一个应用程序 它按照用户选择的固定时间间隔 5 分钟 10 分钟 30 分钟 1 小时 跟踪用户的位置 并将其发送到服务器 该应用程序也应该在后台运行 发送请求 我已将其声明为UIBackgroundMode location 我能
  • 如何将复杂的 SQL 查询转换为 Zend_Db_Select 语句?

    MySQL 网站有一个优秀的教程 http mikehillyer com articles managing hierarchical data in mysql 在数据库中存储分层数据 我正在尝试编写返回节点的直接子节点的查询 我不想只