2017-01-15 64 views
0

我正在制作视频观看服务,并且我有一些问题是根据他们的观点来订购视频。你看,视频的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(); 
?> 

请注意:有一个在videos数据库views列,因为这就是我一直在使用前要计的意见。我不再使用这个,所以views列现在是无用的。

+0

这是否观看表包含每录象或电子邮件recors多 ? –

+0

这是每个视图的一个记录。因此,每次有人观看视频时,他们都会为其IP地址添加一条新记录,其中包含视频ID为 – CheapApples12

+0

的简称:'select col1,colx from videos left join views on ... group by col1,colx按次计数(*)desc' –

回答

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

+0

你是一个绝对的传奇!我很快就失去了希望,因为每个人都反对我,哈哈..非常感谢!我真的很感激它:) – CheapApples12

+0

在这种情况下无需有子查询,inner join会导致0视图的视频从结果集中删除。 – Shadow

+0

嗯,你是对的,它不是*必需的*,但可能很方便,因为它可以在不必在所有列前面使用表别名的情况下编写查询。而且,是的,如果您还想要没有列出任何视图条目的行,请随时将“INNER JOIN”更改为“LEFT JOIN”。我真诚地希望,我不会因为大胆地回答一个“封闭”的问题而对这个完美的Stackoverflow世界感到难过...... – cars10m