1

好吧,我有三个不同的表(检查下面)。我想让我可以看到,这是为每个类别保存的最新图像(req_image_1 等),它不是父级(cat_parent = 0)

一张表,其中包含有关请求的一般信息

+----+--------------------------+------------+
| id | req_name                 | req_parent |
+----+--------------------------+------------+
|  3 | Send pack                |         19 |
|  4 | Go Visit                 |         18 |
|  5 | Stop by                  |         19 |
|  6 | Deliver cookies          |         34 |
+----+--------------------------+------------+

第二个表,其中包含有关请求的元信息

+----------+------------+------------+----------------------------+
| umeta_id | request_id | meta_key   | meta_value                 |
+----------+------------+------------+----------------------------+
|       1  |          3 | req_city   | London                     |
|       2  |          3 | req_street | 11 Baker street            |
|       3  |          3 | req_img_1  | a1c8f69edb37bf6c6.jpg      |
|       4  |          4 | req_city   | Manchester                 |
|       5  |          4 | req_street | 71 Main street             |
|       6  |          4 | req_img_2  | a71f4160d7f7f7555.jpg      |
|       7  |          5 | req_city   | Sheffield                  |
|       8  |          5 | req_street | 240 Duke street            |
|       9  |          6 | req_city   | Manchester                 |
|       10 |          6 | req_street | 13 Chapel street           |
|       11 |          6 | req_img_1  | 854b9faaa53d8fe02.jpg      |
+----------+------------+------------+----------------------------+

第三个表,其中包含有关类别的信息

+----+------------------------+------------+
| ID | cat_name               | cat_parent |
+----+------------------------+------------+
|  1 | Category_01            |          0 |
|  6 | Category_02            |          0 |
| 18 | Category_01_01         |          1 |
| 19 | Category_01_02         |          1 |
| 34 | Category_02_01         |          6 |
+----+------------------------+------------+

到目前为止,我设法通过以下查询获取每个类别的所有图像:

SELECT cat.cat_parent AS category, req.ID, meta.meta_value AS image
FROM d_requests req
LEFT JOIN d_requests_meta meta ON ( req.ID = meta.request_id ) 
LEFT JOIN d_categories cat ON ( req.req_parent = cat.ID ) 
WHERE meta.meta_key LIKE 'req_img_%'

我得到了这个结果:

+------------+----+-----------------------+
| category   | ID | image                 |
+------------+----+-----------------------+
|          1 |  3 | a1c8f69edb37bf6c6.jpg |
|          1 |  4 | a71f4160d7f7f7555.jpg |
|          6 |  6 | 854b9faaa53d8fe02.jpg |
+------------+----+-----------------------+

但我想进行增强,所以我只会得到结果,每个类别只有一个图像,例如类别 1,有图像 a71f4160d7f7f7555.jpg,类别 6 有图像 854b9faaa53d8fe02.jpg

我敢打赌,我错过了一些基本知识,使用子查询和选择 MAX 进行简单增强会很有魅力。

谢谢!

4

3 回答 3

2

SQL小提琴

select 
    category, 
    (select request_id 
     from d_requests_meta 
     where umeta_id = s.ID 
    ) as ID,
    (select meta_value 
     from d_requests_meta 
     where umeta_id = s.ID 
    ) AS image
from (
    SELECT cat.cat_parent AS category, max(meta.umeta_id) ID
    FROM d_requests req
    LEFT JOIN d_requests_meta meta ON ( req.ID = meta.request_id ) 
    LEFT JOIN d_categories cat ON ( req.req_parent = cat.ID ) 
    WHERE meta.meta_key LIKE 'req_img_%'
    group by cat.cat_parent
) s
于 2012-10-09T14:29:57.590 回答
1
SELECT category, ID, image
FROM (  SELECT cat.cat_parent AS category, req.ID, meta.meta_value AS image
        FROM d_requests AS req
        LEFT JOIN d_requests_meta AS meta
        ON req.ID = meta.request_id
        LEFT JOIN d_categories AS cat
        ON req.req_parent = cat.ID
        WHERE meta.meta_key LIKE 'req_img_%'
        ORDER BY req.ID DESC) AS h
GROUP BY category

我使用非官方的 MySQL 假设编辑了 Clodoaldo 的答案,该假设GROUP BY将基于ORDER BY子查询返回第一行。

于 2012-10-09T14:53:24.703 回答
0

试试这个http://sqlfiddle.com/#!2/bfe9a/19

    SELECT Category, ID, Image FROM (
    SELECT Category, ID, Image, 
    @id:=CASE WHEN @category <> category THEN 1 ELSE @id+1 END AS ImgRank,
    @category:=category AS categoryTemp   FROM  
    (SELECT @id:= 0) AS i,
    (SELECT @category:= 0) AS c,    
    (
        SELECT cat.cat_parent AS category, req.ID, meta.meta_value AS image
        FROM d_requests req
        LEFT JOIN d_requests_meta meta ON ( req.ID = meta.request_id ) 
        LEFT JOIN d_categories cat ON ( req.req_parent = cat.ID ) 
        WHERE meta.meta_key LIKE 'req_img_%'
        ORDER BY cat.cat_parent, req.id desc
    ) Vw
  ) vw2 WHERE IMGRANK = 1
于 2012-10-09T14:47:12.893 回答