获取后对行进行排序

时间:2017-01-15 08:57:09

标签: mysql sql

我正在制作视频观看服务,而且我在根据他们的观点订购视频时遇到了一些问题。你看,视频src,它们的缩略图和其他信息都在一个数据库上,录制的视图在另一个数据库上。

包含视频信息的表格如下所示:

,包含视图计数的表格如下所示:

因此,简而言之,计算视图的方式是通过计算views数据库中视频ID的行数。

嗯..我想做的是根据他们的观点订购视频。我这样做有些麻烦,因为我不能只使用$sql = "SELECT * FROM videos ORDER BY views DESC LIMIT 15";

我不确定如何执行此操作,但这是我在从video数据库移动视图计数器之前使用的SQL。

这是我用来显示视频的PHP:

<?php
    $conn = new mysqli("localhost", "username", "password", "database");
    if ($conn->connect_error) {die("Connection failed: " . $conn->connect_error);} 

     $sql = "SELECT * FROM videos ORDER BY views DESC LIMIT 15";
     $result = $conn->query($sql);

     if ($result->num_rows > 0) {
         while($row = $result->fetch_assoc()) {
             echo '<a href="https://www.example.com/watch?v=' . $row["url"] . '">
                 <div class="twinkieman_video-block_small_c">
                     <div class="twinkieman_video-block_small_inner">
                         <div class="twinkieman_video-block_small_header">
                             <img src="' . $row["thumbnail"] . '" alt="' . $row["title"] . '" class="twinkieman_video-block_small_image" />
                         </div>

                         <div class="twinkieman_video-block_small_title">
                             <span>' . $row["title"] . '</span>
                         </div>

                         <div class="twinkieman_video-block_small_uploader">Uploaded by <a href="' . $server . '/user/' . strtolower(getUser($row["postedby"], "name")) . '" class="twinkieman_video-block_small_uploader_name"><span>' . getUser($row["postedby"], "name") . '</span></a></div>
                          <div class="twinkieman_video-block_small_views"><span>' . getViews($row["videoid"]) . ' views</span></div>
                          <div class="twinkieman_video-block_small_posted"><span>' . time_elapsed_string('@' . $row["posted"]) . '</span></div>
                     </div>
                 </div>
             </a>';
         }
     } $conn->close();
 ?>

请注意: views数据库中有一个videos列,因为这是我之前用来计算视图的内容。我不再使用它了,所以views列现在没用了。

1 个答案:

答案 0 :(得分:0)

如果你进行分组并计算像

这样的子查询,它应该很容易解决
SELECT videoid, title, url, thumbnail, 
postedby, posted, cnt
FROM videos
INNER JOIN (
 SELECT videoid vid,COUNT(*) cnt
 FROM views
 GROUP BY videoid) s ON vid=videoid
ORDER BY cnt DESC LIMIT 15

点击这里的小演示:http://rextester.com/XDQ58442