gpt4 book ai didi

php - 通过 PHP 从 Postgres 有效地获取问题的许多标签

转载 作者:行者123 更新时间:2023-11-29 14:24:43 25 4
gpt4 key购买 nike

如何从 Postgres database 中有效地为一个问题获取多个标签?通过 PHP?

我有表 tagsquestions,其中分别有变量 questions_question_idquestion_id,例如.

一个问题可能有多个标签。我可以从表中选择 question_idtitletag。但是,我不知道如何有效地从数据库中获取一个问题的多个标签。PHP 限制了我将数据作为矩阵进行操作。

我可以读取变量 $result 的 question_id、标题和标签。数据是变量 $result 中的矩阵。但是,我不能像矩阵那样引用数据。

我只在 PHP 中找到函数 pg_fetch_rowpg_fetch_all_columns。前者以行数组形式获取数据,而后者以列数组形​​式获取数据。

我的问题 LEFT JOIN提示我可能无法按如下方式获取数据

  1. 获取title、question_idtag 的列
  2. 按 question_id 对数据进行分组,这样我就可以为我的问题加上标签:我曾尝试通过 PHP 操作数据,但我只得到 this far .

最佳答案

如果你有胆量,你可以在 PostgreSQL 中实现一个聚合函数,它为你将所有相关标签连接在一起,然后单个查询将 Do What You Want (tm)

pg=> create aggregate ARRAY_ACCUM (
sfunc = array_append,
basetype = anyelement,
stype = anyarray,
initcond = '{}'
);

pg=> select QUESTIONS.ID as "QID",
pg-> array_to_string(array_accum(TAG), ',') as "TAGS"
pg-> from QUESTIONS
pg-> left join TAGS on QUESTIONS.ID = TAGS.QID;
QID | TAGS
-----+---------------
1 | foo, bar, baz
2 | foo, bar
3 | foo
4 |

-- Reference, for completeness --
pg=> select * from QUESTIONS;
id
----
1
2
3
4
(4 rows)

pg=> select * from TAGS;
qid | tag
-----+-----
1 | foo
1 | bar
1 | baz
2 | foo
2 | bar
3 | foo

在 MySQL 下,此功能称为 GROUP_CONCAT。在 pg 下,它被称为“Do It Yourself”。 :) 现在,在 pg 下也有更微妙的方法来处理它。看看这个 clever blog post ,以及它的评论,我从中窃取^Wadapted create aggregate 上面提出的解决方案。 :)

关于php - 通过 PHP 从 Postgres 有效地获取问题的许多标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1280888/

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