Autor | Zpráva | ||
---|---|---|---|
blahapet Profil |
#1 · Zasláno: 17. 6. 2020, 08:24:44
Ahoj, omlouvám se, pokud řešení mého dotazu je triviální, ale mám následující problém:
V tabulce mám sloupec file, kde ukládám názvy souborů, např. 92.jpg, 93.jpg, ... ... 99.jpg, 100.jpg, 101.jpg, 102.jpg Chci znát řádek s nejvyšším souborem a dám dotaz: SELECT MAX(file) from images Hodí mi to řádek 99.jpg, ale já potřebuji aby to hodilo ten nejvyšší 102.jpg Vím, že kdybych to ošetřil dříve sloupcem integer a vkládal tam jen číslo bez ".jpg", dostal bych, co chtěl, ale teď už to momentálně nejde. Zkoušel jsem i: SELECT SUBSTRING_INDEX(max(file), '.', -3) from images nebo SELECT TRIM(TRAILING '.jpg' FROM max(file)) from images ale vždy mi to vrátilo 99.jpg nebo 99. Díky za jakoukoliv radu |
||
juriad_ Profil * |
#2 · Zasláno: 17. 6. 2020, 08:56:36
Ta funkce max musí být okolo substring nebo trim. Navíc tam ještě musíš přidat CAST, aby to databáze považovala za číslo.
Alternativně: Select file from images order by length(file) desc, file desc limit 1 Pozor na to, že databáze musí projít všechny řádky. To by mohl být problém při milionech obrázků. |
||
N71 Profil * |
#3 · Zasláno: 17. 6. 2020, 09:04:17
Mělo by fungovat i samotné
ORDER BY CAST(`file` AS UNSIGNED) , vzhledem k tomu, že název číslem začíná. Ale jak zmínil juriad, bude to pomalé a pro reálný provoz by se měl doplnit číselný indexovatelný sloupec.
|
||
blahapet Profil |
#4 · Zasláno: 17. 6. 2020, 10:37:53
Děkuji moc, SQL dotaz od juriad pomohl. Milion obrázků tam nemám, řádově stovky, max jeden tisíc. Zkoušel jsem to, načítá se to rychle i v ostré verzi na hostingu. Do budoucna se určitě polepším dle Vašich rad.
|
||
Časová prodleva: 4 roky
|
0