我想知道是否有可能使用PDO PHP获得当周(从今天到7天前)浏览次数最多的10篇文章。
主要问题是在两个独立的表上。主表是条目表。而第二个表是一个按IP访问的表。
Posts (ARTICLE TABLE):
1。ID(文本)
2。标题(文本)
3。文本(文本)
Visitor (COUNTER TABLE):
完整的php代码:1。ID(数量)
2。IP(文本)
3。日期(时间戳)
4。ID_POSTS(文本)
$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 BY
、ORDER BY
和LIMIT 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
不是测试。