2017-01-15 66 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