gpt4 book ai didi

php - 设置字段时的 Postgres 查询 SELECT

转载 作者:搜寻专家 更新时间:2023-10-31 21:48:53 26 4
gpt4 key购买 nike

我有一个表主题。我有两个选择不同数据的查询,一个用于表 votings,一个来自表 messagestopics 有一个字段 m_group,它是 messages 的外键。此字段可以是 NULLmessages 中条目的组(group 是此表中的一个字段)。如果此字段设置为一个组,则应执行查询 1 以选择所有消息,或者如果未设置,则应执行查询 2 以选择该特定主题的所有投票。我在 Apache Web 服务器上使用 Postgres 和 PHP。

现在我的问题是推荐的方法是什么。我想出了两个解决方案(不确定解决方案 2 是否真的可行,还没有尝试过)。


解决方案一

首先选择字段m_group。然后判断是否通过PHP设置,并进行关联查询。


方案二

使用IF THEN ELSE语句

基本上查询应该看起来像这样

IF t.m_group IS NULL 
THEN
query2
ELSE
query1

如前所述,我不确定解决方案 2 是否可行。处理这个问题的最佳方法是什么?解决方案 1 执行两个查询,我认为这是低效的。


更新

如上所述,它应该执行针对特定主题的查询。您拥有该主题的 id。您如何在解决方案 2 中指定它?如果查询中指定了别名,IF THEN ELSE 语句是否已经知道主题的别名 t

最佳答案

如果我没理解错的话,您需要使用两个子查询作为数据集,同时您应该根据 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...

关于php - 设置字段时的 Postgres 查询 SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48501558/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com