[英]PDO GROUP BY not returning results
我很難獲得我正在編寫的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個標記的文章將出現3次(因為從技術上講,有3條記錄滿足該查詢-不包括GROUP BY)。 這就好像GROUP BY被忽略了。
我碰到過
$results = $stmt->fetchAll(PDO::FETCH_ASSOC | PDO::FETCH_GROUP);
$results = array_map('reset', $results);
但這表現得很奇怪。 這將僅返回一個結果(不會重復返回第一篇文章-對於每個應用的標簽一次,均不會返回),但是它將停止在一個單獨的結果上-它不會繼續獲取另外兩個結果。
誰能解釋一下如何獲取滿足查詢條件的三個唯一記錄?
你可以改用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();
你特別的現場表演
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.