如何优化代码以选择有限数量的项目

时间:2016-03-12 13:28:53

标签: php mysql arrays

有一个数据库,其中包含两个对此任务很重要的表:

  • ,其中包含与网页上显示的项目相关的所有数据
  • 观看次数,其中包含这些项目的观看次数

任务是检索具有最多视图数量的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;
    }
}

1 个答案:

答案 0 :(得分:1)

首先,您可以从两个表中选择数据,而不使用第二个<?php } 视图。最重要的是,您可以使用SELECT和随机顺序应用第二个SELECT

LIMIT 10

这种方法将保存任何额外的PHP逻辑。