通过PDO PHP统计前10篇文章访客


TOP 10 article visitor counting via PDO PHP

我想知道是否有可能使用PDO PHP获得当周(从今天到7天前)浏览次数最多的10篇文章。

主要问题是在两个独立的表上。主表是条目表。而第二个表是一个按IP访问的表。

Posts (ARTICLE TABLE):

1。ID(文本)

2。标题(文本)

3。文本(文本)

Visitor (COUNTER TABLE):

1。ID(数量)

2。IP(文本)

3。日期(时间戳)

4。ID_POSTS(文本)

完整的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篇文章

对于这样的查询,我期望有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条款之后。

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

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

不是测试。