0

私はファイル/画像データベースに取り組んでいます。ファイル名にインデックスを付けて「アルバム」に添付するテーブルが1つあります

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

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 をサムネイル形式で返したいのですが、失敗すると、一致するファイルが見つからない元のサイズのファイルが返されます。

今後のクエリでは、オリジナルまたはプレビューが優先される可能性があります。

4

1 に答える 1

0

これは今のところうまくいくようですが、それが正しいかどうかはわかりません...

    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
于 2015-06-26T13:38:05.470 に答える