Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] Sortowanie nietypowych wartości
Forum PHP.pl > Forum > Przedszkole
sannin
Witam,

mam w tabeli kolumnę rozdzielczosc i w niej wpisy tego formatu 1200x1800 jaki dać typ danych, żeby po takim zapytaniu wybierały się według rozdzielczości?

Kod
SELECT * FROM tabela ORDER by rozdzielczosc;
cycofiasz
Rozbij to pole na 2 pola: osobno szerokość i wysokość, oba pola INT. To chyba najłatwiejsze rozwiązanie, najwydajniejsze i można łatwo sprecyzować kryteria, bo teraz nie wiadomo czy chcesz sortować wg szerokości czy wysokości...
Wieviór
Spróbuj tak:

  1. SELECT * FROM tabela ORDER BY SUBSTRING_INDEX(rozdzielczosc, 'x', '1');
phpion
To nie taka prosta sprawa. Musisz się nieźle nakombinować aby uzyskać pożądany efekt. Generalnie musisz powycinać odpowiednie fragmenty ciągu (np. 1280x800), zrzutować je na liczbę całkowitą (aby poprawnie dokonywać obliczeń). Posortować możesz rekordy po iloczynie szerokości (tu: 1280) i wysokości (tu: 800). Wygląda to tak:
  1. -- Przypisuję sobie zmienna, Ty używasz kolumny więc to jest zbędne.
  2. SET @rozdzielczosc = '1280x800';
  3.  
  4. -- Tak sobie wyświetlasz dane na ekranie.
  5. SELECT CAST(LEFT(@rozdzielczosc, LOCATE('x', @rozdzielczosc)-1) AS UNSIGNED) AS width, CAST(SUBSTR(@rozdzielczosc, (LOCATE('x', @rozdzielczosc)+1), LENGTH(@rozdzielczosc)) AS UNSIGNED) AS height;
  6.  
  7. -- W ten sposób możesz użyc wyniku do sortowania (mnożysz wysokość * szerokość).
  8. SELECT (CAST(LEFT(@rozdzielczosc, LOCATE('x', @rozdzielczosc)-1) AS UNSIGNED) * CAST(SUBSTR(@rozdzielczosc, (LOCATE('x', @rozdzielczosc)+1), LENGTH(@rozdzielczosc)) AS UNSIGNED)) AS wyliczona_rozdzielczosc;
  9.  
  10. -- U Ciebie powinno zadziałać więc w ten sposób.
  11. SELECT * FROM tabela ORDER BY (CAST(LEFT(kolumna, LOCATE('x', kolumna)-1) AS UNSIGNED) * CAST(SUBSTR(kolumna, (LOCATE('x', kolumna)+1), LENGTH(kolumna)) AS UNSIGNED));

Oczywiście pod @rozdzielczosc podstaw nazwę swojej kolumny. W ostatnim przykładzie podstaw nazwę tabeli oraz kolumny.
Crozin
Możesz ustawić tę kolumnę jako ENUM i przy wprowadzaniu dostępnych wartości ustawić je w posegregowanej kolejności - wtedy będzie możliwe sortowanie wg tej kolumny. Chociaż IMO rozdzielenie tego na dwie (resultion_width INT, resultion_height INT) to lepszy pomysł.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.