用户特定GROUP BY/ORDER BY/LIMIT WHERE(两个链表)的mySQL PDO SELECT


mySQL PDO SELECT of user-specific GROUP BY / ORDER BY / LIMIT WHERE (two chained tables)

我需要对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.

到目前为止我的步骤:

  • 从查询创建两个数组(ASSOC)
  • 创建用于将所有"子数组"相加的目标数组
  • 创建一个在大海捞针的函数,如果搜索成功,则将整个子数组带到目标数组。

    最后,我有一个特定于用户的目标数组,用于通过foreach循环进行迭代,并逐行回显键的值。