我目前正在尝试创建一个 MySQL 查询,它使用静态顺序从特定表(图像)输出数据。我目前正在使用 UNION ALL 来执行此操作,但我现在有点卡住了。
这是我想要它做的事情:
我有一个名为images的表,其中包含以下字段:user_id、image、image_dimension(此字段值:小、宽、高、大)。
从图像表中,我想以静态顺序检索具有特定尺寸的图像,以将它们放入我的静态图像网格中。现在它变得复杂了:我只想要每个 user_id 一 (1) 个图像。
到目前为止,这是我的尝试:
SELECT
*
FROM
(
(SELECT * FROM `artworks` WHERE img = 'Large' LIMIT 1)
UNION ALL
(SELECT * FROM `artworks` WHERE img = 'Small' LIMIT 2)
UNION ALL
(SELECT * FROM `artworks` WHERE img = 'Large' LIMIT 1)
UNION ALL
(SELECT * FROM `artworks` WHERE img = 'Wide' LIMIT 1)
UNION ALL
(SELECT * FROM `artworks` WHERE img = 'Small' LIMIT 2)
UNION ALL
(SELECT * FROM `artworks` WHERE img = 'Tall' LIMIT 2)
UNION ALL
(SELECT * FROM `artworks` WHERE img = 'Large' LIMIT 1)
) AS order
此查询从“图像”表中提取具有特定维度的图像,并使用 LIMIT - 我得到订单所需的数量。到目前为止,这有效,但它不允许我在保持订单的同时只为每个 user_id 获取一张图像。
如何确保我收到订单(请参阅查询)但每个 user_id 只能获得一张图片?
再次订购是:1x 大、2x 小、1x 大、1x 宽、2x 小、2x 高和 1x 大)
对不起,我的英语不好,如果您需要任何进一步的描述,请告诉我。
编辑:
Table format artworks:
id | user_id | img_name | img
Sample data from artworks:
1 | 1 | Test 1 | Large
2 | 1 | Test 2 | Large
3 | 2 | Test 3 | Small
4 | 2 | Test 4 | Small
5 | 2 | Test 5 | Small
6 | 3 | Test 6 | Small
7 | 3 | Test 7 | Small
8 | 3 | Test 8 | Small
9 | 4 | Test 9 | Large
10 | 4 | Test 10 | Large
11 | 5 | Test 11 | Small
12 | 5 | Test 12 | Wide
13 | 6 | Test 13 | Small
14 | 7 | Test 14 | Small
My expected result (ORDER BY id DESC) to get latest img of each user:
2 | 1 | Test 2 | Large
5 | 2 | Test 5 | Small
8 | 3 | Test 8 | Small
10 | 4 | Test 10 | Large
12 | 5 | Test 12 | Wide
13 | 6 | Test 13 | Small
14 | 7 | Test 14 | Small