MySQL 第一列不同,第二列随机

MySQL distinct first column, random second column

我需要select 区分数据库中 A 列的值,然后随机化 B 列中与 A 列关联的结果。

在下面的例子中:

Year    Filename
1973    1.jpg
1973    2.jpg
1973    3.jpg
1973    4.jpg
1975    5.jpg
1975    6.jpg
1975    7.jpg
1975    8.jpg

我正在寻找的结果是始终在 A 列中显示不同的值,然后随机 select 与 B 列中的值相关联的值。

因此第一个页面加载可能会产生结果:

Year    Filename
1973    1.jpg
1975    5.jpg

但刷新页面加载可能会产生结果:

Year    Filename
1973    3.jpg
1975    8.jpg

1973 和 1975 总是会出现一次,但第二个字段的内容会随着每次页面加载而变化。

这是我的尝试,但执行时间约为 1 秒:

SELECT DISTINCT year, (SELECT DISTINCT filename from photogallery WHERE year = year ORDER BY rand() LIMIT 1) as filename FROM photogallery GROUP BY year ORDER BY 1

DISTINCT 是多余的,您必须使用 table 别名,以便引擎知道 table year 列所属。现在,内部查询中的 WHERE 子句与 none 一样好,因为它始终为真。

SELECT pg1.year,
      (SELECT pg2.filename
              FROM photogallery pg2
              WHERE pg2.year = pg1.year
              ORDER BY rand()
              LIMIT 1) AS filename
      FROM photogallery pg1 
      GROUP BY pg1.year
      ORDER BY 1;