0

我有一个数据库,其中包含有关用户创建的项目的信息。每个项目可以有许多与之关联的图像,我希望有一个 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
4

2 回答 2

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

它解决了你的问题

于 2012-11-03T12:16:03.013 回答
1

webduos 是对的,应该可以解决你的问题

这是解释

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
于 2012-11-03T12:20:42.443 回答