我有一个数据库,其中包含有关用户创建的项目的信息。每个项目都可以有多个与之关联的图像,我希望有一个SQL查询4个随机项目图像,但不应该从同一个项目返回两次图像。
以下是对表格结构的评论(不完整,但包括相关信息):
表1: item_images:
+----------+--------------+
| item_id | filename |
+----------+--------------+
| 1 | test.jpg |
| 1 | test2.jpg |
| 5 | testy.jpg |
+----------+--------------+
表2: item_link:
+----------+-------------+
| item_id | category_id |
+----------+-------------+
| 1 | 1 |
| 5 | 1 |
+----------+-------------+
因此,鉴于上述数据,我想为项目#1和5返回一个随机图像,因为它们都存在于#1类中。
这是我已经尝试过的SQL查询,但由于某种原因,它总是返回相同的两个图像。如何修改此选项以从匹配的项目中返回随机图像?
SELECT `item_images`.`filename` AS `url` FROM `item_images`
INNER JOIN `item_link` ON `item_images`.`item_id` = `item_link`.`item_id`
WHERE `item_link`.`category_id` = 1
GROUP BY `item_link`.`item_id`
ORDER BY RAND()
LIMIT 4
答案 0 :(得分:1)
要从表中查找随机图像,查询如下:
SELECT distinct `item_images`.`filename` AS `url` FROM `item_images`, `item_link`
WHERE `item_images`.`item_id` = `item_link`.`item_id` and `item_link`.`category_id` = 1
ORDER BY RAND()
LIMIT 4
解决你的问题
答案 1 :(得分:1)
webduos是正确的,应该解决你的问题
这里是explaination
SELECT distinct `item_images`.`filename` AS `url` FROM `item_images`
INNER JOIN `item_link` ON `item_images`.`item_id` = `item_link`.`item_id`
WHERE `item_link`.`category_id` = 1
GROUP BY `item_link`.`item_id`
ORDER BY RAND()
LIMIT 4