有一个数据库,其中包含两个对此任务很重要的表:
任务是检索具有最多视图数量的50个项目,然后随机显示10个项目。当前的解决方案看起来有点无效,因为它从数据库中检索这50个项目的完整信息只是为了改变结果,显示前10个并丢弃其余的。有没有更有效的方法来处理这个问题,最好是通过优化数据库查询?
$query = "SELECT items.*, (SELECT items_views.views FROM items_views WHERE items_views.item = items.id) as views FROM items ORDER BY views DESC LIMIT 0, 50";
$result = mysqli_query($conn, $query);
$final_array = array();
while($row = mysqli_fetch_assoc($result)) {
$final_array[] = $row;
}
if(is_array($final_array)) {
$amount_to_display = 10;
$result_count = 0;
shuffle($final_array);
foreach($final_array as $final_row) {
// display the results here
if (++$result_count >= $amount_to_display) break;
}
}
答案 0 :(得分:1)
首先,您可以从两个表中选择数据,而不使用第二个<?php }
视图。最重要的是,您可以使用SELECT
和随机顺序应用第二个SELECT
:
LIMIT 10
这种方法将保存任何额外的PHP逻辑。