【问题标题】:mySQL PDO SELECT of user-specific GROUP BY / ORDER BY / LIMIT WHERE (two chained tables)用户特定的 GROUP BY / ORDER BY / LIMIT WHERE 的 mySQL PDO SELECT(两个链表)
【发布时间】:2016-01-13 00:38:26
【问题描述】:

我需要 n 个不同主题中最后 n 个条目的用户特定 mySQL SELECT。

我有两个表格:areasposts

areas 有列id、coordinates、userID

postsiD、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


【解决方案1】:

根据对这个问题的糟糕回答,我认为 SQL 不是解决这个问题的正确方法。 因此,我的方法是通过 PHP 进行过滤和链接。 有很多可用的php数组函数:http://php.net/manual/en/ref.array.php.

到目前为止我的步骤:

  • 从查询 (ASSOC) 创建两个数组
  • 创建目标数组以添加所有“子数组”
  • 创建一个在大海捞针中寻找针的函数,如果搜索成功,则将整个子数组带到目标数组。

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

  • 【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-18
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      相关资源
      最近更新 更多