繁体   English   中英

MySQL的JOIN表与首选项和一个GROUP BY

[英]Mysql JOIN tables with preference and a GROUP BY

我正在处理文件/图像数据库。 我有一张表可以索引文件名并将它们附加到“专辑”中

FILES TABLE
file_id | file_name | album_id
1       | image x   |  2
2       | image y   |  2

第二个表存储文件的位置和各种大小

SOURCE TABLE
source_id | file_id | source_size | source_url
1         |  1      | original    | //... 
2         |  1      | thumbnail   | //... 
3         |  2      | original    | //... 
4         |  3      | original    | //... 

当前,“ source_size”列以文本(原始,缩略图,预览等)的形式列出。

我正在努力查询带有source_size首选项的表,同时仍返回该相册中的所有文件。

到目前为止,它看起来像这样:

SELECT 
f.*, s.*
FROM source s
INNER JOIN files f ON f.file_id=s.file_id 
WHERE f.album_id="2" 
GROUP BY s.file_id
ORDER BY FIND_IN_SET(s.source_size,"thumbnail, original") DESC

我希望它首先以缩略图格式返回文件的source_id,但如果这样做失败,则仅返回原始大小的文件(在该文件中找不到匹配项)。

在将来的查询中,可能会偏爱原始或预览。

这似乎暂时有效,但不确定是否正确...

    SELECT 
    f.*, fs*
    FROM files f
    INNER JOIN (SELECT s.* FROM file_source s ORDER BY FIND_IN_SET(s.source_size,"thumbnail, original") DESC) fs ON f.file_id=fs.file_id 
    WHERE f.album_id="2" 
    GROUP BY f.file_id
    ORDER BY f.file_id DESC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM