MYSQL QUERY:为每个相册从表中选择 1 行照片

Posted

技术标签:

【中文标题】MYSQL QUERY:为每个相册从表中选择 1 行照片【英文标题】:MYSQL QUERY : Select 1 rows photo from table for each album 【发布时间】:2015-02-26 22:36:32 【问题描述】:

我有一个记录表,它有一个名为画廊的表。我插入了太多照片,我只想从每个图库中随机选择 2 张照片。

这是我的结构化

CREATE TABLE IF NOT EXISTS `gallery` (
`gallery_id` int(11) NOT NULL,
  `gallery_name` varchar(100) NOT NULL,
  `gallery_name_seo` varchar(120) NOT NULL,
  `gallery_client` varchar(100) NOT NULL,
  `gallery_date` date NOT NULL,
  `gallery_type` int(2) NOT NULL,
  `gallery_desc` text,
  `gallery_publish` char(1) NOT NULL DEFAULT 'N' COMMENT 'Y = Yes & N = No',
  `gallery_added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `deleted` int(11) NOT NULL DEFAULT '0'
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;

这里还有一张桌子

CREATE TABLE IF NOT EXISTS `gallery_photo` (
`id` int(10) NOT NULL,
  `id_gallery` int(10) NOT NULL,
  `file_name` varchar(255) NOT NULL,
  `file_added` date NOT NULL,
  `deleted` smallint(6) NOT NULL DEFAULT '0'
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=latin1;

其实这里有很多例子,但我很难理解,

如何根据我的问题创建查询。?

谢谢

【问题讨论】:

太棒了。那么有什么问题呢? “我只想从每个画廊中选择 2 张照片” – 两张什么?最旧的、最新的、随机的……两张照片? 我想为每个画廊显示 2 张随机照片.. 请相应修改您的问题 【参考方案1】:

以下查询将为每个 id_gallery 提供 1 张随机照片:

SELECT * 
FROM (SELECT * FROM `gallery_photo` ORDER BY RAND()) as `rand_photos`
GROUP BY rand_photos.id_gallery

你可以UNION它自己为每个画廊随机获取 2 张照片:

SELECT * 
FROM (SELECT * FROM `gallery_photo` ORDER BY RAND()) as `rand_photo1`
GROUP BY rand_photo1.id_gallery
UNION
SELECT * 
FROM (SELECT * FROM `gallery_photo` ORDER BY RAND()) as `rand_photo2`
GROUP BY rand_photo2.id_gallery
ORDER BY id_gallery

【讨论】:

以上是关于MYSQL QUERY:为每个相册从表中选择 1 行照片的主要内容,如果未能解决你的问题,请参考以下文章

如何从表中选择熊猫系列中的值?

由于外键为空值,无法从表中获取数据

MYSQL 根据多行从表中选择

PHP从表中选择不起作用

在MySQL中从表中随机选择一行

如何从表中的每个不同类别中选择三行?