我需要对n个不同主题中的最后n个条目进行特定于用户的mySQL SELECT。
我有两张表:区域和帖子。
区域具有列id、坐标、userID
帖子具有列iD、tPIC、cONTENT、aREAid、cREATED
每行中aREAid的值是面积表。这意味着两个表之间的链是:id<=>aREAid
表"区域"中的用户特定查询:
$go4Row1 = $pdo->prepare ('SELECT id,coordinates,userID FROM areas WHERE userID = ?');
$go4Row1->bindParam(1, $gottenUsersID, PDO::PARAM_INT);
$go4Row1->execute();
在表格"posts"中显示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_s的数组,并使用IN子句来生成所需的"bloc"/"filtered population",然后我可以从中使用GROUP BY/ORDER BY/LIMIT。(但我希望有一个更简单的解决方案…)
如果有人能给我一个提示/帮助我解决这个问题,我会非常高兴。
提前Thanx,-流量
p.s.确实将列名从tEXT更改为cONTENT,以避免使用关键字(这里是一个关键字列表,可能有人感兴趣。更多的单词:https://dev.mysql.com/doc/refman/5.7/en/keywords.html)
p.p.s.这是一个示例代码。原点有不同的列名,每个查询本身都能正常工作。。
根据对这个问题的糟糕回答,我认为SQL不是解决这个问题的正确方法因此,我的方法是通过PHP进行过滤和链接。有很多可用的php数组函数:http://php.net/manual/en/ref.array.php.
到目前为止我的步骤:
最后,我有一个特定于用户的目标数组,用于通过foreach循环进行迭代,并逐行回显键的值。