0

我很难获得我正在编写的 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);

但这表现得同样奇怪。这将只返回一个结果(它不会返回第一篇文章三次 - 每个应用的标签一次),但它会停止在一个结果上 - 它不会继续获取另外两个结果。

谁能解释如何让它获取满足查询的三个唯一记录?

4

2 回答 2

0

您可以改用INNER JOIN

尝试这个

   SELECT * FROM articles a
   INNER JOIN article-tag-link atl
      ON  a.articleID = atl.articleID 
   INNER JOIN tags t
      ON  t.tagID = atl.tagID 
   GROUP BY a.articleID 
   LIMIT 3;

尝试这个

  $sth->fetchAll();
于 2013-05-31T09:21:07.970 回答
0

你特别的场秀

SELECT articles.articleID 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;
于 2016-10-09T15:36:33.357 回答