Autor Zpráva
peta
Profil *
mam tabulku uzivatelu, kde mam nicky:

aaa
bbb000
ccc
g_neco
guest_cislo
ddd

a potrebuji to seradit tak, aby guest_* a g_* bylo na konci, nejlepe v poradi:

uzivatele
g_
guest_

jak na to? aspon funkce, uz si dihledam pouziti
Anonymní
Profil *
... ORDER BY uzivatele ASC");

opačně je DESC
a na konec dotazu, za to už se dává jen LIMIT
Hugo
Profil
Anonymní

On spíš myslí něco takového

... ORDER BY (uzivatele='guest_*') ASC, (uzivatele='g_*') ASC, uzivatele ASC");
Kajman_
Profil *
Asi to má byt obecně, takže
... (uzivatele like 'guest_%') ASC, (uzivatele like 'g_%') ASC, ...
peta
Profil *
Super :) Ma to jeste nejake mouchy, ale vypada to takto:
$dotaz = "SELECT * FROM $tabulka WHERE `room_id` = '$room' ORDER BY (`room_login`) ASC, (`room_login` like 'g_%') ASC, (`room_login` like 'guest_%') ASC";

http://mracek.xhosting.cz/sez/sezchatlogin.php

Jsem to chtel resit slozitejsi konstrukci pres spojeni tabulek.
Kajman_
Profil *
V order by by měly být ty like konstrukce před samotným loginem (jak to má Hugo), jinak to pobývá smyslu.
peta
Profil *
mno, ja mam ted tuto konstrukci:
$dotaz = "SELECT * FROM $tabulka WHERE `room_id` = '$room' ORDER BY `room_login` ASC, `room_login` LIKE 'g\_%' DESC, `room_login` LIKE 'guest\_%' DESC";

Jestli jsem to pochopil spravne, tak nejdriv seto seradi podle loginu,
pak mi presune G_ nakonec a pak mi jeste presune GUEST_ uplne nakonec.
Bohuzel zatim to vypada takto:
nicku
guest_
g_
- guest mam urceno, kdyz nezada prezdivku stava se z nej guest_cislo
- g, kdyz prezdivku zada, tak je to g_prezdivka
- nick, pokud je nalogovany v seznamce, automaticky se nick prebira
(jinak tam je jeste nejaka chybka, ze mi nedovoli se nalogovat 2x na stejnou prezdivku za stejne IP a to ani v pripade nicku)

Kajman_
Jo, a samotne podtrzitko, jak jsem vysondoval, znamena 1 jakykoliv znak, takze se musi lomitkovat.
Zkusim to otocit jako Hugo, ale mam pocit, ze mi to nefungovalo.


V podstate by mi stacila konstrukce:
1. serad podle abecedy
2. presun vsechny s podtrzitkem nakonec
(protoze pri seradeni by melo byt vys g_ nez guest_)
peta
Profil *
Takhle je to OK, presne, jak to chci:

$dotaz = "SELECT * FROM $tabulka WHERE `room_id` = '$room' ORDER BY `room_login` LIKE 'guest\_%' ASC, `room_login` LIKE 'g\_%' ASC, `room_login` ASC";

Online

* H aaa
* H ccc
* H guest(14)
* H guest10
* H guest11
* H guest12
* H guest2
* H guest3
* H guest4
* H guest5
* H guest6
* H guest7
* H guest8
* H guest9
* g_
* g_666
* g_aaa
* g_cc2
* g_cc3
* g_ccc
* g_ccc3
* g_ddd
* g_peta
* g_peta1
* guest_13
* guest_15
* guest_16
* guest_17

mno, skoro, jsou nejak otocena cisla, ale tak serazoval to jako text,takze chapu poradi:
a10
a11
a2
Kdyby nekdo vedel, jak to poresit, taky by to bylo fajn :)
Kajman_
Profil *
... ORDER BY
IF(`room_login` LIKE 'guest\_%',CHAR_LENGTH(`room_login`),0),
`room_login` LIKE 'g\_%',
`room_login`";
Kajman_
Profil *
A řadí se tak, že se porovná první definice a jen když je to stejné, tak se to kouká na tu další.
peta
Profil *
Kajman_ Jasne, pocitat delku textu... Ale myslel jsem, ze je na to nejaka funkce, jako volba serazovaci metody.
Ale dobry, dik, tohle bude stacit.
peta
Profil *
ten dotaz mam ted takhle (sory zpozdeni, vzdy resim neco jine, mezitim nez to tam zkousim)

$dotaz = "SELECT * FROM $tabulka WHERE `room_id` = '$room' ORDER BY `room_login` LIKE 'guest\_%' ASC, `room_login` LIKE 'g\_%' ASC, CHAR_LENGTH(`room_login`), `room_login` ASC";

A funguje to uplne skvele
aaa01
aaa2
aaa10
aaa009 - ale tady uz na tom nesejde (bych mohl z nicku filtrovat nuly, ale proc)
Toto téma je uzamčeno. Odpověď nelze zaslat.

0