gpt4 book ai didi

MySQL 其他人查看过

转载 作者:行者123 更新时间:2023-11-29 13:23:33 25 4
gpt4 key购买 nike

我们的网上商店有一个自定义框架,我们希望添加一些新功能,就像其他人也查看过的那样。这也应该显示其他人查看过的产品。因此,它应该显示也看过这本书的其他人看过的书籍。

我们有一个数据库,用于记录用户查看过哪些产品的日志。

CREATE TABLE `log_products_viewed` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`productId` bigint(11) DEFAULT NULL,
`userId` bigint(11) DEFAULT NULL,
`createdAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=84 DEFAULT CHARSET=latin1;

然后我们想查询其他人浏览过的产品。我们已经尝试了一些方法,但这是否是正确的查询。

SELECT productId, 
Count(productId) AS viewAmount
FROM log_products_viewed
WHERE userid IN (SELECT DISTINCT( userid ) AS members
FROM log_products_viewed
WHERE productId = '396')
AND productId <> '396'
GROUP BY productId
ORDER BY viewAmount DESC
LIMIT 0, 2;

我们得到一个包含两个结果和相应金额的返回。但如果 1 个用户多次查看某个项目,他就能够操纵查询。

因此,查询必须返回用户浏览次数最多的产品,而不是浏览次数最多的产品。我被困在查询中,你能帮我吗?

最佳答案

如果此表仅用于此目的,您可以添加

UNIQUE KEY (`productId`, `userId`)

它,因此用户“不能两次查看产品”。将插入语句更改为

INSERT INTO log_products_viewed (productId, userId) VALUES (?, ?) ON DUPLICATE KEY IGNORE

-- or if you want to update the date

INSERT INTO log_products_viewed (productId, userId) VALUES (?, ?) ON DUPLICATE KEY UPDATE lastViewedAt = CURRENT_TIMESTAMP()

避免警告。

这也有助于保持表较小,从而提高 SELECT 查询的速度。

否则:

SELECT productId, 
Count(DISTINCT userid) AS viewAmount
FROM log_products_viewed
WHERE etc. etc.

关于MySQL 其他人查看过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20448067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com