【发布时间】:2016-01-13 00:38:26
【问题描述】:
我需要 n 个不同主题中最后 n 个条目的用户特定 mySQL SELECT。
我有两个表格:areas 和 posts。
areas 有列id、coordinates、userID
posts 有 iD、tOPIC、content、aREAid、cREATED 列
每行中aREAid的值就是对应的id 面积表。这意味着两个表之间的链是:id 区域援助
表“区域”中的用户特定查询:
$go4Row1 = $pdo->prepare ('SELECT id,coordinates,userID FROM areas WHERE userID = ?');
$go4Row1->bindParam(1, $gottenUsersID, PDO::PARAM_INT);
$go4Row1->execute();
在“帖子”表中显示 15 个不同主题中的最后 15 个条目:
$latest_n_distinct_posts =
$pdo->prepare('SELECT MAX(cREATED) AS max_date, iD, tOPIC, cONTENT, aREAid, cREATED
FROM posts
GROUP BY
tOPIC
ORDER BY
max_date DESC
LIMIT 15');
// the WHERE-clause was no solution here
// ...$latest_n_distinct_posts->bindParam(1, $aREAid, PDO::PARAM_INT);
$latest_n_distinct_posts->execute();
我可以做一个功能:
while ($areaRow = $go4Row1->fetch(PDO::FETCH_ASSOC)) {
echo' show: '.$areaRow['id'].' with coordinates:
'.$areaRow['coordinates'].' userID: '.$areaRow['userID'].'<br>';
}
或功能:
while ($latestRow = $latest_n_distinct_posts->fetch(PDO::FETCH_ASSOC)) {
echo' last date: '.$latestRow['cREATED'].' with topic:
'.$latestRow['tOPIC'].' text: '.$latestRow['cONTENT'].'<br>';
}
但我无法通过以某种方式链接限制 WHERE id aREAid 找到有效的解决方案来使帖子查询特定于用户。 我不确定是否有必要使用 aREAid_s 创建一个数组并使用 IN 子句生成所需的“bloc”/“filtered population”,然后我可以从中使用 GROUP BY / ORDER BY / LIMIT。 (但我希望有一个更简单的解决方案......)
如果有人能给我一个提示/帮助我解决这个问题,我会非常高兴。
提前谢谢, -流
附言确实将列名从 tEXT 更改为 cONTENT - 以避免使用关键字(这是一个关键字列表,可能会感兴趣。然后预期会出现更多单词:https://dev.mysql.com/doc/refman/5.7/en/keywords.html)
p.p.s.这是一个示例代码。来源有不同的列名,每个查询本身都正常工作..
【问题讨论】:
-
注意:
text是 mysql 关键字,可能会导致问题。它是一种数据类型。您需要用反引号 (`) 将其包装起来以将其用作列名。此外,您通常需要按您选择的不在聚合函数内的每一列进行分组。如果你不这样做,Mysql 5.7 现在会抛出错误。所以如果你打算升级mysql,最好现在就做。 -
感谢您的提示,乔纳森!不幸的是,我不需要等待升级 - 查询确实产生了一些奇怪的结果(有时有效,有时没有/有错误的顺序。但是,我可以通过按照以下示例创建适应来解决它:stackoverflow.com/questions/14770671/…
标签: php mysql select pdo group-by