我正在努力获得一个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);
但这表现得同样奇怪。这将只返回一个结果(它不返回第一篇文章三次 - 每个应用标记一次),但它将停止在那一个结果 - 它不会再继续获取两个结果。
任何人都可以解释如何获取它以获取满足查询的三个唯一记录吗?
答案 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:])