PDO GROUP BY不返回结果

时间:2013-05-31 09:17:01

标签: mysql pdo group-by

我正在努力获得一个PDO数据库类,我正在编写以便与我们GROUP BY子句的查询很好地协作。

例如,我想检索数据库中的文章列表,但文章使用多对多关系链接到标签。

即。文章> article-tag-link<标签

我正在尝试运行的查询非常简单:

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个标签,将出现三次(因为技术上有三条记录满足查询 - 不包括GROUP BY)。所以就好像GROUP BY被忽略了一样。

我遇到了

$results = $stmt->fetchAll(PDO::FETCH_ASSOC | PDO::FETCH_GROUP);
$results = array_map('reset', $results);

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

任何人都可以解释如何获取它以获取满足查询的三个唯一记录吗?

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

你的特殊场秀

l = " ".join(line.split(" ")[1:])