通过PDO PHP计算的十大文章访问者

时间:2016-08-09 10:58:51

标签: php mysql pdo

我想知道是否有可能使用PDO PHP获取本周最受欢迎的10篇文章(今天至7天之后)。

主要问题是在两个单独的表上。主表是文章表。第二个表是IP的访客表。

帖子(文章表):

  

1.ID(文字)

     

2.TITLE(文字)

     

3.TEXT(文字)

访客(计数器表):

  

1.ID(号码)

     

2.IP(文字)

     

3.DATE(TIMESTAMP)

     

4.ID_POSTS(text)

完整的PHP代码:

$week_start = date('Y-m-d',time()+( 1 - date('w'))*24*3600);  
$week_end =  date('Y-m-d',time()+( 7 - date('w'))*24*3600); 
$query = "SELECT * FROM visitor WHERE DATE BETWEEN '".$week_start."' AND '".$week_end."'  LIMIT 0, 10 ";
$result = $db->prepare($query); 
$result->execute(); 
$i=1;

while($row = $result->fetch(PDO::FETCH_ASSOC)) {
$post[$i]=$row[ID];
$i++;
}

for ($i = 1; $i <= 10; $i++) {
$query = "SELECT * FROM POSTS WHERE ID_POST = '".$post[$i]."' LIMIT 0, 10";
$result = $db->prepare($query); 
$result->execute(); 

while($row = $result->fetch(PDO::FETCH_ASSOC)) {
echo<<<PRINT
$row[ID].$row[TITLE]: $row[text]
PRINT;
}
}

我认为问题在于你必须要计算在桌子上写了多少人,然后移动主表。

步骤: 1.计算每周通过辅助表输入每篇文章的数量 2.提取同一周最受欢迎的10个 3.在主表的同一周内呈现10篇阅读最多的文章

提前致谢。

2 个答案:

答案 0 :(得分:1)

对于此类查询,我预计会有COUNT()GROUP BYORDER BYLIMIT 10。因此:

SELECT id_post, COUNT(*) as cnt
FROM visitor v
WHERE DATE BETWEEN '".$week_start."' AND '".$week_end."'
GROUP BY id_post
ORDER BY cnt DESC
LIMIT 0, 10 ;

注意:WHERE子句始终遵循FROM子句。

此外,您不应该在查询字符串中嵌入日期。您应该学习使用参数。

答案 1 :(得分:0)

select * from (select id, count(1) as cnt
from visitor where date > (NOW()- INTERVAL 7 DAY) group by id) v1, posts p
where v1.id = p.id
order by v1.cnt desc
limit 10

未经测试。