Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 具有多个表的mysql_Php_Sql_Mysql - Fatal编程技术网

Php 具有多个表的mysql

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 因此,这些连接保

我有一个大问题要让它正常工作。这是交易

我有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
因此,这些连接保存有关“发布”时间轴的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
,它在连接表中。感谢我百万次!它工作得很好!我可以再补充一个问题吗…:)在我的图像表中,我有一个类型列,显示图像的类型。我如何在语句中添加该类型,以便获取该信息进行排序?再次感谢你的帮助!!嘿,托比亚斯,我也添加了条件。。通过向上投票并选择正确答案(如果正确的话)来表达你的感激之情。这不仅仅是为了这个问题,也是为了你们所有的问题。再次非常感谢!它的工作就像一个魅力与编辑太!非常感谢,真的!!你好!我想到了另一个难题。。。如果我想获取一个特定时间事件的所有图像,而不考虑投票-只使用时间线表图像表和连接表,这看起来怎么可能!!谢谢