结果由其他sql查询结果排序

时间:2019-01-29 12:21:04

标签: php sql

我在运行代码时遇到问题。该代码确实按日期时间从数据库中进行排序,但仍然按照关注者数据库的ID的顺序进行排序。我想按日期时间排序所有消息,而不要按日期和时间排序...希望您能为我服务!

查询关注者:

  $sqlselector = "SELECT * FROM isFollowing WHERE follower=?;";
  $stmt = mysqli_stmt_init($conn);
  if (!mysqli_stmt_prepare($stmt, $sqlselector)) {
    header("Location: ../index.php?error=sqlerror");
    exit();
}
else {
  mysqli_stmt_bind_param($stmt, "i", $id);
  mysqli_stmt_execute($stmt);
  $resultget = mysqli_stmt_get_result($stmt);
  $resultselector = mysqli_stmt_num_rows($stmt);
  while($selector = mysqli_fetch_assoc($resultget)) {

查询消息:

 $sqlmeessages = "SELECT * FROM meessages WHERE idUser=? ORDER BY `meessages`.`timePosted` ASC LIMIT 200;";
      $stmt = mysqli_stmt_init($conn);
      if (!mysqli_stmt_prepare($stmt, $sqlmeessages)) {
          header("Location: ../index.php?error=sqlerror");
          exit();
      }
      else {
        mysqli_stmt_bind_param($stmt, "i", $selector['isFollowing']);
        mysqli_stmt_execute($stmt);
        $resultmeessages = mysqli_stmt_get_result($stmt);
      }
      //while loop for the meessages
      while($rowmeessages = mysqli_fetch_assoc($resultmeessages)) {

我希望结果是消息仅按日期时间排序,而不按其他数据库的ID排序!

2 个答案:

答案 0 :(得分:0)

为什么不只用一个查询就可以做到这一点?很难遵循您的数据结构,但是像这样:

SELECT m.*
FROM isFollowing f JOIN
     messages m
     ON m.idUser = f.follower
WHERE f.follower = ?
ORDER BY m.TimePosted;

答案 1 :(得分:0)

这里的问题是,您正在运行一个无序查询,然后运行多个有序查询。整个循环仍在无序查询上运行。但更重要的是,您无需执行许多查询即可返回单个数据集。通过JOIN关键字,您可以将表连接到单个结果集中。

例如:

SELECT *
FROM isFollowing
INNER JOIN messages ON isFollowing.follower = messages.idUser
WHERE isFollowing.follower = ?
ORDER BY messages.timePosted ASC
LIMIT 200

(与SELECT *相比,您甚至可能对列更明确,尤其是在两个表中都使用任何列名的情况下。)

这实际上只是对 S 结构化的 Q 查询 L 语言可以查询关系数据所做的工作的了解。根据一般经验,让SQL处理查询和结构化数据的优化总比总是好,而不是(确实很擅长)简单的查询,并在应用程序代码中将它们组合在一起。