根据最受欢迎的计数器获取ID

时间:2019-06-19 10:13:30

标签: php mysql

我正在构建最受欢迎的文章系统,在该系统中,我向数据库发送ID,并将total_views值增加1,但是我不知道如何检索最受欢迎的值。

我尝试通过价值来获取,但是我对sql还是陌生的,不知道要搜索什么。

$servername = "";
$username = "";
$password = "";
$dbname = "";


$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

$id = '44441';


$sql = "SELECT id FROM top_pages WHERE id='$id'";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
   echo 'exist';
   $update = "UPDATE top_pages SET total_views = total_views + 1 where id='$id'";
   mysqli_query($conn, $update);
} else {
   echo 'not found';
   $insert = "INSERT INTO top_pages (id,total_views) VALUES ('$id', '1')";
   mysqli_query($conn, $insert);
}

mysqli_close($conn);

我对代码的期望是在过去8小时内基于total_views提取前10个ID,因此仅存储/更新了最近8小时内的前10个ID。

2 个答案:

答案 0 :(得分:1)

添加日期列后,您可以像以下这样获取最近8小时的数据:

SELECT id FROM top_pages 
WHERE your_date_column_name > DATE_ADD(NOW(), INTERVAL -8 HOUR)
ORDER BY total_views DESC LIMIT 10

使用INTERVAL -8 HOUR获取8小时的数据

ORDER BY total_views DESC获得最高观看次数记录

LIMIT 10以限制记录

答案 1 :(得分:0)

您当前表示数据的方式将无济于事,因为您没有关于total_views更新时间的任何信息。假设一个top_pages条目是30天前创建的,其total_views为3000。无法确定在最近8小时内完成了3000次操作的次数。

相反,拥有这样的表会更好:

  

访问次数(id,page_id,visit_timestamp)

然后执行

select page_id, count(*)
from visits
group by page_id
where visit_timestamp >= DATE_SUB(NOW(), INTERVAL 8 HOUR)
order by count(*) desc
limit 0, 10;