Autor Zpráva
blahapet
Profil
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 *
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 *
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0