我想知道是否可以使用PDO PHP获得本周浏览量最大的10篇文章(从今天到7天前)。
主要的问题是在两张单独的桌子上。主表是项目表。第二张桌子是IP访客。
职位(文章表):
1.ID(文本)
2.标题(文本)
3.文本(文本)
访客(柜台):
1.身份证(号码)
2.IP(文本)
3.日期(时间戳)
4.ID U帖子(文本)
完整的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;
}
}
我认为的问题是,您必须计算有多少人在表中编写了第二个表,然后移动主表。
步骤:
一。按次表计算每周输入的文章数
2。抽取同一周浏览量最多的10个
三。按主表列出一周内阅读量最大的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
子句后面。此外,不应在查询字符串中嵌入日期。你应该学会用参数代替。
关于php - 通过PDO PHP排名前10位的访客数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38848893/