我有一张桌子topics。我有两个查询,它们选择不同的数据,一个用于表votings,一个来自表messages。topics有一个字段m_group,它是messages的外键。这个字段可以是NULL,也可以是messages中条目的组(group是本表中的一个字段)。如果将此字段设置为组,则应执行查询1以选择所有消息;如果未设置该字段,则应执行查询2以选择此特定主题的所有投票。我在Apache PHP服务器上使用Postgres和PHP。
现在我的问题是,推荐的方法是什么。我想出了两个解决方案(不确定解决方案2是否真的可行,还没有尝试)。
解决方案1
首先选择字段m_group。然后确定它是否通过PHP设置,并执行相关的查询。
解决方案2
使用IF THEN ELSE语句
基本上,查询应该如下所示
IF t.m_group IS NULL
THEN
query2
ELSE
query1如前所述,我不确定解决方案2是否可行。处理这件事最好的方法是什么?解决方案1执行两个查询,我认为这是低效的。
更新
如上所述,它应该执行对特定主题的查询。您有这个主题的id。如何在解决方案2中指定这一点?如果在查询中指定的话,IF THEN ELSE语句是否已经知道主题的别名t?
发布于 2018-08-29 07:02:20
如果我对您的理解是正确的,您需要使用两个子查询作为数据集,而您应该根据m_group字段中的内容使用其中的一个作为源。如果只选择几行,则第二种方法是好的。但是,如果需要从表中获取大量数据,则需要执行太多的子查询。我宁愿先从主题中获取所需的所有数据,然后在这两个查询中选择所需的数据。伪SQL查询如下所示:
with t1 as (select t.id, group_m, ... from topics t where t.m_group is not null),
t2 as (select t.id, ... from topics t where t.m_group is null)
select id, title, SUM(subtable_id) AS votes
from query1
join t1 on t1.id = query1.id and...
union
select id, title, SUM(subtable_id) AS votes
from query2
join t2 on t2.id = query2.id and... https://stackoverflow.com/questions/48501558
复制相似问题