[英]How to create view counter with PHP and MYSQL for every new day?
我目前正在 PHP 中編寫自己的 CMS 系統。
帖子的所有視圖每天都應存儲在 MySQL 數據庫中。
目前我有一個視圖計數器,它將帖子的所有帖子視圖存儲在帖子表中。
$article_id = $_GET['p_id'];
// article view counter
$view_query = "UPDATE articles SET article_views_count = article_views_count + 1 WHERE article_id = $article_id ";
$send_query = mysqli_query($connection, $view_query);
現在我想改變整個事情,每天每個帖子都會在單獨的表格中創建一個新條目。
我已經學會了如何做這一切,但我當前的 SQL 命令每次調用時都會在表中添加一個新條目,而不是一整天。
新的 SQL 命令:
INSERT INTO days_views (`article_id`, `day_views_count`, `day`) VALUES (1, 1, CURDATE()) ON DUPLICATE KEY UPDATE `day_views_count` = `day_views_count` + 1;
CREATE TABLE `days_views` (
`day_views_id` int(11) NOT NULL,
`article_id` int(11) NOT NULL,
`day_views_count` int(255) NOT NULL,
`day` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_german2_ci;
ALTER TABLE `days_views`
ADD PRIMARY KEY (`day_views_id`);
ALTER TABLE `days_views`
MODIFY `day_views_id` int(11) NOT NULL AUTO_INCREMENT;
如何每天為每個帖子添加一行?
我如何計算一整天的觀看次數?
更改表定義以使用article_id
和day
作為主鍵。
CREATE TABLE `days_views` (
`article_id` int(11) NOT NULL,
`day` date NOT NULL,
`day_views_count` int(255) NOT NULL,
PRIMARY KEY (`article_id`, `day`),
CONSTRAINT `article` FOREIGN KEY (`article_id`) REFERENCES `articles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_german2_ci;
然后使用 UPSERT 語句遞增:
INSERT INTO days_views (`article_id`, `day`, `day_views_count`)
VALUES (<article_id>, CURDATE(), 1)
ON DUPLICATE KEY UPDATE day_views_count = day_views_count + 1;
您的主鍵必須是day_views_id
和article_id
的組合鍵,而不僅僅是day_views_id
。
ALTER TABLE `days_views` ADD UNIQUE `CompKey` (`day_views_id`, `article_id`);
添加唯一索引后,您現有的邏輯將起作用。 請注意有關 SQL 注入的評論。
以不同的方式思考可能是個好主意。 我將嘗試解釋:
您可以為每個視圖提示進行插入,以保存以下內容:
這樣,您每天為每個帖子添加一行。
很簡單,你可以做一個count(); 具有特定 article_id 的行數,日期時間字段 = NOW(); . 這將返回特定日期特定文章的總瀏覽量。
添加session id並將其存儲到表中的每個插入可能是一個好主意。
我希望我有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.