我遇到一个主要问题,让它正常工作。这是交易。
我有4个表 - timeline
,connections
,images
,votes
时间表:
time_id
time_title
等
时间轴表通过连接表
与images表连接连接表:
time_id
image_id
因此,连接保存有关“发布”时间轴和图像ID
的ID的信息图片表:
image_id
image_url
image_type
图像表包含可以在同一时间轴(帖子)中使用的图像,因此我可以通过查看连接表来查看连接。
我还有一张投票表,其中包含有关特定时间表帖子的投票信息
投票表:
vote_id
time_id
投票表包含每个time_id的很多行,并且想法是计算最受欢迎的次数
所以继承人的问题: 我需要得到5个最多投票的time_titles并用每个time_title(post)的第一张图片显示它们,以便它看起来像这样的例子
等
每个时间轴行(帖子)可以容纳许多图像,我只想显示每个帖子的第一个。
希望你理解我的问题!
非常感谢!
答案 0 :(得分:2)
查询将是
SELECT
count(v.vote_id) as vote_times
t.time_title,
(
SELECT
image_url
FROM
images
WHERE
image_id = (
SELECT
image_id
FROM
connections as c
WHERE
c.time_id = t.time_id
LIMIT 1
)
LIMIT 1
) as image_url
FROM
votes as v
LEFT JOIN
time as t
on
t.time_id = v.time_id
GROUP BY
v.time_id
ORDER BY
vote_times desc
LIMIT 5;
这可行,但可能不是最优化的。
- 编辑 获取image_type也可以尝试
SELECT
count(v.vote_id) as vote_times
t.time_title,
i.image_url,
i.image_type
FROM
votes as v
LEFT JOIN
time as t
on
t.time_id = v.time_id
LEFT JOIN
images as i
on
i.image_id = (
SELECT
image_id
FROM
connections as c
WHERE
c.time_id = t.time_id
LIMIT 1
)
GROUP BY
v.time_id
ORDER BY
vote_times desc, image_type desc
LIMIT 5;
答案 1 :(得分:1)
SELECT t.time_title, i.*
FROM (
SELECT t.time_title
FROM timeline t
LEFT JOIN
votes v
ON v.time_id = t.time_id
GROUP BY
t.id
ORDER BY
COUNT(vote_id) DESC, t.time_id DESC
LIMIT 5
) t
JOIN images i
ON i.id =
(
SELECT ii.image_id
FROM connections c
JOIN image ii
ON ii.image_id = c.image_id
WHERE c.time_id = t.time_id
ORDER BY
ii.id DESC -- or whatever order you define for the "first" image
LIMIT 1
)