我想知道是否有可能使用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篇阅读最多的文章
提前致谢。
答案 0 :(得分:1)
对于此类查询,我预计会有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
子句。
此外,您不应该在查询字符串中嵌入日期。您应该学习使用参数。
答案 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
未经测试。