Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL] Sortowanie nietypowych wartości
sannin
post
Post #1





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

Ostrzeżenie: (0%)
-----


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;
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.12.2025 - 16:08