【发布时间】:2018-07-08 03:59:14
【问题描述】:
我有一张桌子topics。我有两个查询选择不同的数据,一个用于表votings,一个来自表messages。 topics 有一个字段m_group,它是messages 的外键。此字段可以是NULL 或messages 中的条目组(group 是此表中的一个字段)。如果此字段设置为组,则应执行查询 1 以选择所有消息,如果未设置,则应执行查询 2 以选择此特定主题的所有投票。我在 Apache Web 服务器上使用 Postgres 和 PHP。
现在我的问题是推荐的方法是什么。我想出了两个解决方案(不确定解决方案 2 是否真的可行,还没有尝试过)。
解决方案 1
首先选择字段m_group。然后确定是否通过 PHP 设置并执行相关查询。
解决方案 2
使用IF THEN ELSE 声明
基本上查询应该是这样的
IF t.m_group IS NULL
THEN
query2
ELSE
query1
如前所述,我不确定解决方案 2 是否可行。处理这个问题的最佳方法是什么?方案一执行两个查询,我觉得这样效率低。
更新
如上所述,它应该针对特定主题执行查询。你有这个主题的id。如何在解决方案 2 中指定这一点?如果在查询中指定,IF THEN ELSE 语句是否已经知道主题的别名 t?
【问题讨论】:
-
解决方案2不也做两个查询吗?顺便说一句,我更喜欢选项 2。
-
@TimBiegeleisen 我不完全知道这是如何工作的。但是由于运行 PHP 的服务器与我的数据库服务器不同,我猜最好只向数据库服务器发送一个命令。
-
请问您能否提供查询 1 和 2 以查看其结果的结构?通常,
IF必须在两个分支中返回相同类型的结果。 -
您是否考虑过使用存储过程来处理这个问题?您将调用 proc 一次,然后在内部决定运行两个查询中的哪一个。
-
@RomanHocke 查询有点复杂,但它们都具有相同的结构。它们每个条目返回 3 个值
id、title和SUM(subtable_id) AS votes,这也意味着表votings和messages都有子表来存储其他数据
标签: php sql postgresql