mysql - 通过将 Jpg 优先于 Doc,每个产品仅检索一个文件

标签 mysql arrays

我有以下“图像”表......

Id  Idu idA Doc_pic Doc_cont    Doc_name    Doc_type
1   1   1   yes     no          a.jpg       jpg
1   1   1   no      yes         b_doc.jpg   Doc
3   1   2   yes     no          c.jpg       Jpg
4   1   2   no      yes         D_doc.jpg   Doc
5   1   3   yes     no          e.jpg       Jpg
6   1   3   yes     no          f.jpg       Jpg
7   1   3   no      yes         G_doc.jpg   Doc
8   2   5   no      yes         F_doc.jpg   Doc
9   3   6   yes     no          h.jpg       Jpg
10  3   8   yes     no          j.jpg       Jpg
11  4   4   no      yes         K_doc.jpg   Doc
12  4   4   no      yes         L_doc.jpg   Doc
13  4   4   yes     no          m.jpg       Jpg
14  4   9   yes     no          n.jpg       Jpg

如你所见,我有三个标识符,id、idu 和 ida

id - 是表格图像的主要 ID。 idu - 是放置图像的用户。 ida - 是来自另一个表的产品 ID,该表具有链接到它的图像和文档。

我如何为每个产品只显示 Doc_type= jpg 并且只显示一个,如果像 id=8 那样不可用,则显示文档。

查询后我想要的输出应该是...

1   1   1   yes no  a.jpg   jpg
3   1   2   yes no  c.jpg   Jpg
5   1   3   yes no  e.jpg   Jpg
8   2   5   no  yes F_doc.jpg   Doc
9   3   6   yes no  h.jpg   Jpg
10  3   8   yes no  j.jpg   Jpg
13  4   4   yes no  m.jpg   Jpg
14  4   9   yes no  n.jpg   Jpg

我已经在 mysql select、distinct、group by 和我使用过的更多子句中尝试了所有可能的方法,但运气不佳,有些人可能会提供帮助 ...

提前致谢。

最佳答案

实现它的一种方法:

SELECT
    image.*
FROM
    ( SELECT DISTINCT idA FROM image ) idA_list

    LEFT OUTER JOIN
        (
            SELECT
                Id ,idA
            FROM
                image
            WHERE
                Doc_type = 'jpg'
            GROUP BY idA
        )
        jpg_images ON jpg_images.idA = idA_list.idA

    LEFT OUTER JOIN
        (
            SELECT
                Id ,idA
            FROM
                image
            WHERE
                Doc_type = 'doc'
            GROUP BY idA
        )
        doc_images ON doc_images.idA = idA_list.idA

    LEFT OUTER JOIN
        image ON image.id = COALESCE( jpg_images.id ,doc_images.id )

关于mysql - 通过将 Jpg 优先于 Doc,每个产品仅检索一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31932230/

相关文章:

php - Mysql根据单个列的唯一值限制返回结果的数量

javascript - $(...)..map(...).reduce 不是函数

java - 从另一个类 java 访问 int[] 时出现问题

c - 通过结构别名数组

php - 如何保护登录 session

java - Spring Boot 不从 application.properties 加载用户名

mysql - 如何解决 "warning"表示无法使用密码 :YES? 连接到 sql 服务器的问题

mysql - Vue JS 组件中来自 MySQL 的嵌套 JSON 求和

arrays - 如何将自定义对象数组转换为字符串数组?

c# - 如何使用空数组执行 Zip 操作