Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> naturalne sortowanie VARCHAR *prosze o pomoc*
Therronis
post
Post #1





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 9.04.2003
Skąd: New Jersey

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


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





Grupa: Zarejestrowani
Postów: 315
Pomógł: 1
Dołączył: 6.08.2003
Skąd: Kielce

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


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 (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
Jabol
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 467
Pomógł: 13
Dołączył: 22.02.2003

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


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
Go to the top of the page
+Quote Post
adwol
post
Post #4





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

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


[sql:1:c2a747213c]select pole from tabela order by cast(pole as unsigned);[/sql:1:c2a747213c]
Go to the top of the page
+Quote Post
Therronis
post
Post #5





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 9.04.2003
Skąd: New Jersey

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


@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 (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

@s_w_ir : masz racje, ciezko to bedzie (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

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





Grupa: Przyjaciele php.pl
Postów: 1 467
Pomógł: 13
Dołączył: 22.02.2003

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


@Therronis: bo też nie mówiłem, że jest. Poszukaj jakiejś funkcji która robi integera z asci.
Go to the top of the page
+Quote Post
adwol
post
Post #7





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

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


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





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 9.04.2003
Skąd: New Jersey

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


@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.
Go to the top of the page
+Quote Post
adwol
post
Post #9





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

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


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





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 9.04.2003
Skąd: New Jersey

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


[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_
Go to the top of the page
+Quote Post
Jabol
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 1 467
Pomógł: 13
Dołączył: 22.02.2003

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


a jaka wersja ( [manual:c97054a238]mysql_get_server_info()[/manual:c97054a238] )?
Go to the top of the page
+Quote Post
adwol
post
Post #12





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

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


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_).
Go to the top of the page
+Quote Post
Therronis
post
Post #13





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 9.04.2003
Skąd: New Jersey

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


wersja 3.23.55 :/

w zmiennej order_ mam wartosc DESC lub nie mam nic

mysle ze to jednak wersja (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

jednakze dziekuje za pomoc (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
DeyV
post
Post #14





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




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]
Go to the top of the page
+Quote Post
uboottd
post
Post #15





Grupa: Zarejestrowani
Postów: 384
Pomógł: 0
Dołączył: 3.04.2003
Skąd: Chorzow

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


Cytat
wersja 3.23.55 :/
mysle ze to jednak wersja (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

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]
Go to the top of the page
+Quote Post
pkwiatkowski
post
Post #16





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.02.2008

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


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 ?
Go to the top of the page
+Quote Post
erix
post
Post #17





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




http://forums.codewalkers.com/database-hel...sql-832007.html
Go to the top of the page
+Quote Post
pkwiatkowski
post
Post #18





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 21.02.2008

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


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 (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

chyba jednak cos w PHP wymysle zeby to sortowac.

Ten post edytował pkwiatkowski 13.07.2009, 18:33:09
Go to the top of the page
+Quote Post

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: 25.08.2025 - 19:13