Php 将多个SQL查询组合为一个查询

Php 将多个SQL查询组合为一个查询,php,mysql,sorting,while-loop,Php,Mysql,Sorting,While Loop,我知道这可能真的很简单,但我试图找到一些类似的例子,但失败了 问题是,我想在数据库中列出8张随机图片,按添加日期排序。我已经成功地做到了这一点,但只有在几个迭代查询的情况下才会变得非常缓慢。所以,如果有人愿意教我如何将它们结合起来以更快的速度,我想联合是最好的选择?这是我的工作(但sloow代码) 所以,每一篇文章都是桌面照片和音乐会的一部分,但只有一些是图片的一部分,有时只是用来将不同的专辑组合在一起。当他们被分组在一起时,我会从分组ID(图片)中随机取一个名字,如果他们是自己,我会从那里随机

我知道这可能真的很简单,但我试图找到一些类似的例子,但失败了

问题是,我想在数据库中列出8张随机图片,按添加日期排序。我已经成功地做到了这一点,但只有在几个迭代查询的情况下才会变得非常缓慢。所以,如果有人愿意教我如何将它们结合起来以更快的速度,我想联合是最好的选择?这是我的工作(但sloow代码)

所以,每一篇文章都是桌面照片和音乐会的一部分,但只有一些是图片的一部分,有时只是用来将不同的专辑组合在一起。当他们被分组在一起时,我会从分组ID(图片)中随机取一个名字,如果他们是自己,我会从那里随机取一个名字(音乐会)。

accckk!(用猫比尔臭名昭著的话来说。)

很难从数据库中找出代码真正想要的结果集

此查询不是最有效的,但它将从
photos
表返回8个随机行,这些行按addedate排序:

SELECT r.*, c.*
  FROM (SELECT p.*
          FROM photo p
         WHERE p.concertid IS NOT NULL
         ORDER BY RAND()
         LIMIT 0,8
       ) r
  JOIN concert c
    ON c.concertid = p.concertid
 ORDER BY r.addedDate ASC
如果您有一个非常大的
photo
表,这会很慢,因为必须为表中的每一行调用
RAND()
函数,MYSQL必须生成一个临时结果集(表的副本),然后在该派生列上对其排序

(注意:我在这里假设要返回“random”的是
photo
表)行,我假设
concertid
concert
表上的主键,以及
photo
表中的外键。很明显,您有三个表…
concert
picture
photo
,但不清楚哪些列是主键,哪些列是主键e外键,因此很可能是我弄错了。)

(注意:将
p.*
c.*
替换为实际要返回的表达式列表。)


有更有效的方法返回单个随机行。在您的情况下,您只需要8行,您大概不想返回重复的图像。

您能解释一下您的意思吗:我想在数据库中列出库中的8个随机图像,按添加日期排序?您可能想看看:可能的重复我不认为这些示例与我不想在整个表上使用RAND()或从孔表中随机获得一行相同。我想整理8篇最新的帖子(大约200行),然后从中随机得到8篇帖子。嗨,斯宾塞7593,你觉得你能再看一眼我的帖子吗。遗憾的是,我忘了在我的第一篇文章中包含数据库结构和关于它的想法,但我已经更新了它。问题是,我不想从整个数据库中随机获得一篇文章,只需要从20篇相同ID的文章中获得8篇最新日期的文章。
TABLE OF photo:
PKEY: photoID
FKEY: concertID
name

TABLE OF concert:
PKEY: concertID
FKEY: pictureID
name
URL
addedDate

TABLE OF picture
PKEY: pictureID
name
date
SELECT r.*, c.*
  FROM (SELECT p.*
          FROM photo p
         WHERE p.concertid IS NOT NULL
         ORDER BY RAND()
         LIMIT 0,8
       ) r
  JOIN concert c
    ON c.concertid = p.concertid
 ORDER BY r.addedDate ASC