【发布时间】:2014-09-18 06:25:34
【问题描述】:
表格:
*shots*
id user_id cat_id name extension size title description library created updated
此表包含所有图片
favorites
id shot_id user_id date
此表包含所有添加的用户最喜欢的图像
stars
id shot_id user_id date
此表包含所有给定的用户图像的星星
views
id shot_id user_id date
此表包括每个用户的每个视图
points
id shot_id count date
用户的每一个动作(addFavvorite、giveStar、viewShot)都会为特定镜头加分
是否可以一次完成以下查询?
SELECT * FROM shots WHERE id = ?
获取单个镜头的信息。
SELECT COUNT(*) FROM favorites WHERE shot_id = ?
获取将镜头添加到收藏夹的用户计数
SELECT COUNT(*) FROM star WHERE shot_id = ?
获取给予 Star 的用户计数
SELECT COUNT(*) FROM views WHERE shot_id = ?
获取访问此镜头的人数
SELECT AVG(count) AS attention FROM points WHERE shot_id = ? AND date > DATE_SUB(DATE(),INTERVAL 2 DAY) ORDER BY shot_id
当前注意力(最近两天的平均得分)
SELECT SUM(count) AS attention FROM points WHERE shot_id = ? ORDER BY shot_id
镜头的受欢迎程度(自上传镜头以来的点数)
以及如何根据关注度和受欢迎程度标准选择镜头(例如,显示所有关注度大于 40 的镜头,或者显示人气大于 100 的镜头)
【问题讨论】:
-
如果您使用正确的
JOINs 和GROUP BY,那将是可能的。没有任何分析,我可以告诉您加入所有必需的表格并按shot_id分组。这应该接近您期望的结果。 -
@OP 请不要过度格式化一个问题它看起来真的丑
-
我试过这个查询,但我没有检索到计数:SELECT s.*, u.username, u.fullname, c.title AS ctitle,c.description AS cdescription, COUNT(f .id) AS 收藏夹,COUNT(st.id) AS 明星,COUNT(v.id) AS 视图 FROM shot s INNER JOIN users u ON u.id = s.user_id INNER JOIN categories c ON c.id = s.cat_id INNER JOIN 收藏 f ON f.shot_id = s.id INNER JOIN stars st ON st.shot_id = s.id INNER JOIN views v ON v.shot_id = s.id WHERE s.id = :shotId
-
您可以使用UNION查询语句,但有一个限制,即每个查询必须具有相同数量的选定字段。
-
@Matteo sry,但在我看来这是不可能的..