Php 具有多个表的mysql
我有一个大问题要让它正常工作。这是交易 我有4个表格-Php 具有多个表的mysql,php,sql,mysql,Php,Sql,Mysql,我有一个大问题要让它正常工作。这是交易 我有4个表格-时间线,连接,图像,投票 时间线表: time_id time_title time_id image_id image_id image_url image_type vote_id time_id 等等 时间线表通过连接表与图像表连接 连接表: time_id time_title time_id image_id image_id image_url image_type vote_id time_id 因此,这些连接保
时间线
,连接
,图像
,投票
时间线表:
time_id
time_title
time_id
image_id
image_id
image_url
image_type
vote_id
time_id
等等
时间线表通过连接表与图像表连接
连接表:
time_id
time_title
time_id
image_id
image_id
image_url
image_type
vote_id
time_id
因此,这些连接保存有关“发布”时间轴的id和有关图像id的信息
图像表:
time_id
time_title
time_id
image_id
image_id
image_url
image_type
vote_id
time_id
Images表包含可以在同一时间线(post)中使用的图像,因此通过查看连接表,我可以看到连接
我还有一个投票表,它保存了关于特定时间轴帖子的投票信息
投票表:
time_id
time_title
time_id
image_id
image_id
image_url
image_type
vote_id
time_id
投票表包含许多行,每一行都有一个时间id,其思想是计算次数,以确定哪一行是最受欢迎的
问题是:
我需要获得5个投票最多的time_标题,并在每个time_标题(post)的第一张图片中显示它们,这样看起来就像这样
- 与标题1相对应的图像1-投票率最高
- 图2与标题2相对应-投票数第二高
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
)
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;
这将起作用,但可能不是最优化的
--编辑
要获取图像类型,请尝试
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;
这不是即时消息,你不必把每个句子都放在自己的行中…
其中ii.time\u id=t.id
图像表没有time\u id
,它在连接表中。感谢我百万次!它工作得很好!我可以再补充一个问题吗…:)在我的图像表中,我有一个类型列,显示图像的类型。我如何在语句中添加该类型,以便获取该信息进行排序?再次感谢你的帮助!!嘿,托比亚斯,我也添加了条件。。通过向上投票并选择正确答案(如果正确的话)来表达你的感激之情。这不仅仅是为了这个问题,也是为了你们所有的问题。再次非常感谢!它的工作就像一个魅力与编辑太!非常感谢,真的!!你好!我想到了另一个难题。。。如果我想获取一个特定时间事件的所有图像,而不考虑投票-只使用时间线表图像表和连接表,这看起来怎么可能!!谢谢