我正在构建最受欢迎的文章系统,在该系统中,我向数据库发送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。
答案 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;