【问题标题】:PHP / Postgres One Output per rowPHP / Postgres 每行一个输出
【发布时间】:2020-06-09 07:28:10
【问题描述】:

我正在尝试为我的语句迭代到的每一行获取一行输出,但对于它找到的每个“票证”,它会输出 100 次。在当前 SQL 队列中,只有 4 个可能的票证符合条件。

$ticketIdQuery = pg_query($db, "SELECT ticket.assignee_id, ticket.subject FROM ticket INNER JOIN ticket_assignee_mapping ON ticket.assignee_id=ticket_assignee_mapping.assignee_id WHERE status_id = $firstLevelId");

if($ticketIdQuery)
{
    while ($ticketIdQueryFetch = pg_fetch_array($ticketIdQuery))
    {
        print_r($ticketIdQueryFetch);
    }
}

有没有办法将找到的每一行的输出限制为一个

【问题讨论】:

  • 嗨 Dnz,欢迎来到 Stack Overflow。如您所说,获取每一行的所有记录的原因是由于 SQL 中的连接。您可以尝试在 where 中使用 DISTINCT 子句,这样您只会得到不同的返回值。

标签: php arrays postgresql select


【解决方案1】:

当您的 JOINed 表具有一对多关系并且您只选择有限数量的列时,您看不到为什么会得到如此多的结果。因此,我建议不要使用 DISTINCT,而是使用 GROUP BY 子句来指定您真正感兴趣的列。如果您还在 SELECT 中添加了 COUNT(*),则可以继续调整查询,直到记录计数总计返回的每一行 1。试试这个:

$ticketIdQuery = pg_query($db, "SELECT ticket.assignee_id, ticket.subject, COUNT(*) FROM ticket INNER JOIN ticket_assignee_mapping ON ticket.assignee_id=ticket_assignee_mapping.assignee_id WHERE status_id = $firstLevelId GROUP BY ticket.assignee_id, ticket.subject");

如果您仍有疑问,请发布ticket 和ticket_assignee_mapping 的表定义。

【讨论】:

    猜你喜欢
    • 2011-07-12
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2014-02-20
    • 2014-06-09
    相关资源
    最近更新 更多