Therronis
21.11.2003, 21:23:08
nie wiem czy dobrze topic napisalem - mam pytanie : jak zrobic by wyniki zapytania MySQL dawalo wyniki posortowane naturalnie (1,2,12,20) wg kolumny okreslonej jako VARCHAR. dotychczasowe moje starania nie pozwalaja mi osiagnac nic wiecej niz wyniki posortowane tak: 1,12,2,20 - a nie o to mi chodzi. jeszcze jedno - musze miec kolumne oznaczona jako VARCHAR...
prosze o pomoc
PS
nie potrafilem znalezc nic na ten temat na forum i w necie...
s_w_ir
21.11.2003, 21:34:27
Ja też miałem taki problem. Zrobiłem tak ż e przewaliłem wszystko do tablic($tablica[] - żeby nie było) i dopiero tam sortowałem.
Sądze tylko że nie będzie to dobre rozwiązanie dla wielomilionowych rekordów
Jabol
21.11.2003, 21:39:43
mysql na pewno ma funkcje typu atoi(). musisz tylko zdefiniować jaka długość pola jest zarezerowowana na liczbę. Ogólnie możesz też dodać dodatkowe pole sort_ord
adwol
22.11.2003, 01:18:07
[sql:1:c2a747213c]select pole from tabela order by cast(pole as unsigned);[/sql:1:c2a747213c]
Therronis
22.11.2003, 16:04:50
@adwol : chyba nie moze VARCHAR potraktowac jako UNSIGNED poniewaz UNSIGNED jest chyba zarezerwowane dla kolumn okreslonych jako liczbowe (INT, TINIINT, etc) - wyskakuje taki komunikat
[sql:1:799d1b4f3b]Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource ...[/sql:1:799d1b4f3b]
@Jabol : szukalem funkcji atoi() w manualu, ale jej tam nie ma
@s_w_ir : masz racje, ciezko to bedzie
hmmm... nie wiem jak to zrobie, chyba cos bede kombinowal z dawaniem do tablicy dwuch rekordow, pozniej sortowaniem tablicy, a po tym listowaniem wg posortowanej tablicy...
Jabol
22.11.2003, 16:09:59
@Therronis: bo też nie mówiłem, że jest. Poszukaj jakiejś funkcji która robi integera z asci.
adwol
22.11.2003, 16:21:08
Cytat
@adwol : chyba nie moze VARCHAR potraktowac jako UNSIGNED poniewaz UNSIGNED jest chyba zarezerwowane dla kolumn okreslonych jako liczbowe (INT, TINIINT, etc) - wyskakuje taki komunikat
Musiałeś coś źle przepisać. To działa.
Therronis
22.11.2003, 16:45:38
@Jabol : funkcja cast() moze spelnic taka funkcje posrednio jak mysle
@adwol : hmm...
[sql:1:4067db782e]SELECT *
FROM tabela
ORDER BY cast(pole AS UNSIGNED)
DESC
LIMIT 500, 700;[/sql:1:4067db782e]
czy to poprawnie zapisane? bo nie jestem pewnien :/ nie wiem czy moge miec tez starsza baze danych, ale watpie.
adwol
22.11.2003, 17:20:53
Cytat
[sql:1:5fcd2b6547]SELECT *
FROM tabela
ORDER BY cast(pole AS UNSIGNED)
DESC
LIMIT 500, 700;[/sql:1:5fcd2b6547]
czy to poprawnie zapisane? bo nie jestem pewnien :/ nie wiem czy moge miec tez starsza baze danych, ale watpie.
Tak.
Spróbuj wpisać to bezpośrednio w shellowym kliencie albo zrób w PHPie:
[php:1:5fcd2b6547]<?php
print mysql_error();
?>[/php:1:5fcd2b6547]
i pokaż jaki masz błąd.
U mnie na 4.0.15 działa to bezproblemowo.
Therronis
22.11.2003, 17:32:40
[php:1:35af554ee8]<?php
$result = mysql_query ("
SELECT *
FROM klienci
ORDER BY cast($sort_ AS UNSIGNED)
$order_
LIMIT $i, $ii");
?>[/php:1:35af554ee8]
[sql:1:35af554ee8]You have an error in your SQL syntax near '(KB_minuta AS UNSIGNED) LIMIT 0, 200' at line 4[/sql:1:35af554ee8]
KB_minuta to wartosc zmiennej $sort_
Jabol
22.11.2003, 17:34:56
a jaka wersja ( [manual:c97054a238]mysql_get_server_info()[/manual:c97054a238] )?
adwol
22.11.2003, 17:41:28
Cytat
KB_minuta to wartosc zmiennej $sort_
A co masz w zmiennej
$order_? Nie dublujesz sobie czasami frazy
ORDER BY? Wypisz sobie gdzieś dokładnie to co dostaje
mysql_query (z rozwiniętymi wartościami zmiennych
$sort_ i
$order_).
Therronis
22.11.2003, 17:48:40
wersja 3.23.55 :/
w zmiennej order_ mam wartosc DESC lub nie mam nic
mysle ze to jednak wersja
jednakze dziekuje za pomoc
DeyV
22.11.2003, 23:20:21
Therronis - tak czy inaczej - wydrukuj nam to zapytanie, zwykłym
[php:1:580cc2d703]<?php
$pyt= "SELECT ... ";
mysql_query ($pyt) or die ( "Bład w zapytaniu : ". $pyt );
?>[/php:1:580cc2d703]
uboottd
24.11.2003, 14:34:34
Cytat
wersja 3.23.55 :/
mysle ze to jednak wersja

Tak, cast(cos as typ) wystepuje od wersji4. Jednak na szybko mozesz zastosowac takie wyjatkowo chamskie zagranie:
[sql:1:0a0d65afe1]
SELECT *
FROM tabela
ORDER BY pole+0 DESC
LIMIT 500, 700;
[/sql:1:0a0d65afe1]
pkwiatkowski
13.07.2009, 15:59:04
Ja chcialem odswiezyc temat bo nie znalazlem odpowiedzi na ten problem, moze dojdziemy do tego na przykladzie mojego:
mam w kolumnie dane:
WRA38
WAR12
WAR102
CH12
CH4
No i chcialbym zeby to posortowalo tak:
CH4
CH12
WRA12
WRA38
WAR102
Da jakoś radę to zrobić SQLem ?
erix
13.07.2009, 16:23:22
pkwiatkowski
13.07.2009, 17:45:16
Cytat(erix @ 13.07.2009, 17:23:22 )

poczytam zobacze co tu zamiesciles.
Dzieki za odpowiedz na problem.
edit
Jednak to nie zdalo egzaminu w moim przypadku
chyba jednak cos w PHP wymysle zeby to sortowac.
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.