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;
我需要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;