MySQL - 将许多小查询转换为大查询

时间:2014-12-28 01:10:44

标签: php mysql pdo

我收到了以下代码:

$query = $db->prepare("SELECT views FROM restaurant_views 
WHERE (restaurant_id=:rest_id) AND (date=:date) LIMIT 1");

for($i = 11; $i > -1; $i--){
    $query->bindParam(":rest_id", $_SESSION['restaurant_id']);
    $query->bindParam(":date", date('Y-m-d', strtotime("-{$i} days")));
    $query->execute();
    $row = $query->fetch(PDO::FETCH_ASSOC);
    echo $i . ' - ' . $row['views'].'<br>';                     
}

输出是这样的:

  1. 5
  2. 12
  3. 30
  4. 0
  5. 6
  6. 8
  7. 5
  8. 5
  9. 0
  10. 0
  11. 0
  12. 5
  13. 这是应该的,但我想删除此循环,并能够一次性检索所有日期的视图。请记住,如果餐厅一天没有任何意见,那么该行不存在。 (在第一个视图上创建行),因此输出不会是12行。 必须是12行,非常重要!

1 个答案:

答案 0 :(得分:1)

如果你想要12行,那么添加一个&#34;表&#34;在查询中获取十二行:

SELECT n.n, rv.views
FROM (select 0 as n union all select 1 union all select 2 union all select 3 union all
      select 4 union all select 5 union all select 6 union all select 7 union all 
      select 8 union all select 9  union all select 10 union all select 11 union all select 12
     ) n left join
     restaurant_views rv
     on rv.date = date_sub(curdate(), interval n.n day) and
        restaurant_id=:rest_id ;

我不确定limit条款的作用。 restaurant_views中的一家餐馆在任何一天都有多行吗?