我很难获得我正在编写的 PDO 数据库类,以便很好地处理我们使用 GROUP BY 子句的查询。
例如,我想检索数据库中的文章列表,但文章使用多对多关系链接到标签。
即文章>文章标签链接<标签
我尝试运行的查询非常简单:
SELECT * FROM articles, article-tag-link, tags WHERE articles.articleID = article-tag-link.articleID AND tags.tagID = article-tag-link.tagID GROUP BY articles.articleID LIMIT 3;
我正在使用准备好的语句来执行带有 PDO 的查询,并且我知道没有 GROUP BY 的简单查询可以完美地工作,因为它在其他地方使用没有问题。
因此,在执行查询时,我正在做:
$result = $stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
这会返回我想要的结果,尽管它们没有正确分组。即一篇可能有 3 个标签的文章将出现 3 次(因为从技术上讲,有 3 条记录满足查询 - 不包括 GROUP BY)。所以就好像 GROUP BY 被忽略了。
我遇到过
$results = $stmt->fetchAll(PDO::FETCH_ASSOC | PDO::FETCH_GROUP);
$results = array_map('reset', $results);
但这表现得同样奇怪。这将只返回一个结果(它不会返回第一篇文章三次 - 每个应用的标签一次),但它会停止在一个结果上 - 它不会继续获取另外两个结果。
谁能解释如何让它获取满足查询的三个唯一记录?