Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Mieszane sortowanie, 123123123
Daimos
post 29.08.2009, 14:25:53
Post #1





Grupa: Zarejestrowani
Postów: 1 319
Pomógł: 118
Dołączył: 26.11.2003
Skąd: Lublin

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


Witam
Może ktoś z Was, zna sposób na posortowanie danych, hmm na przemian, miks taki winksmiley.jpg z poziomu MySQLa
chodzi mi o takie coś
tabela
NUMERKI
1
1
1
2
2
2
2
2
3
3
3
...

Chodzi mi o wynik mieszany, czyli
1
2
3
1
2
3
1
2
3
itd

Sprawa wydaje się nieskomplikowana, ale nie jest tak kolorowo, bez kilku podzapytań chyba się nie obędzie, może ktoś ma pomysł na jakieś zapytanie/procedurę?

Pozdrawiam


--------------------
scriptun.com. Startup z poradnikami do gier ttp.zone i ttpzone.pl
Go to the top of the page
+Quote Post
wookieb
post 29.08.2009, 14:48:45
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




A po co ci tak posortować? musisz też podać więcej informacji o tabeli. Co ona przechowuje. Czy nie będzie luk w kolejności numeracji np 111333

Ten post edytował wookieb 29.08.2009, 14:51:35


--------------------
Go to the top of the page
+Quote Post
erix
post 29.08.2009, 14:49:09
Post #3





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




http://nospor.pl/news/show/id/25/


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Daimos
post 29.08.2009, 14:55:54
Post #4





Grupa: Zarejestrowani
Postów: 1 319
Pomógł: 118
Dołączył: 26.11.2003
Skąd: Lublin

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


luki beda, nie zawsze trafi sie tyle samo numerkow, wiec moze, a nawet powinno byc tak:
Cytat
1
2
3
4
5
1
2
3
4
2
3
4
2
3
2
2
2
2
2

problem w tym, aby numerki byly regularnie jakos przemieszane, nie powtarzaly sie, ale czarno to widze z poziomu mysql ;/

ps. strona nospora nie dziala cos

Ten post edytował my salsa 29.08.2009, 15:00:56


--------------------
scriptun.com. Startup z poradnikami do gier ttp.zone i ttpzone.pl
Go to the top of the page
+Quote Post
kefirek
post 29.08.2009, 15:00:23
Post #5





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

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


Może takie coś ?
  1. SET @i:=0;
  2. SET @ile:=4;
  3. SELECT *,
  4. @i:=@i+1,
  5. @i % @ile AS liczba
  6. FROM numery ORDER BY liczba ASC


Ten post edytował kefirek 29.08.2009, 15:01:52
Go to the top of the page
+Quote Post
wookieb
post 29.08.2009, 15:09:36
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Ludzie o czym wy piszecie w ogóle?

Nie napisałeś nadal PO CO ci coś takiego. "posortowanie" (a właściwie poukładanie) według twojego pomysłu jest bardzo zasobożerne.


--------------------
Go to the top of the page
+Quote Post
Daimos
post 29.08.2009, 15:27:20
Post #7





Grupa: Zarejestrowani
Postów: 1 319
Pomógł: 118
Dołączył: 26.11.2003
Skąd: Lublin

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


Wookieb, musze miec na kazdej stronie unikalne wyniki, w miare mozliwosci (wiadomo jak sie liczby za bardzo powtarzaja, to na koncu beda te same, jedna za druga, ale wazne tu pierwsze strony)
A tak pozatym, jestem ciekawy czy faktycznie tak mozna zrobic z poziomu MySQL, wiec pytasz w jakim celu? z ciekawosci?
Moge kombinujac robiac nowe kolumny itd. ale chce zobaczyc, czy ktos wymysli sposob znajac fakty ktore podalem, bo ja nie moge

kefirek
Cytat
SET @i:=0;
SET @ile:=4;
SELECT *,
@i:=@i+1,
@i % @ile AS liczba
FROM numery ORDER BY liczba ASC
jesli sortujesz tu faktycznie po polu(aliasie) "liczba" to sie skrypt wyklada

Ten post edytował my salsa 29.08.2009, 15:35:39


--------------------
scriptun.com. Startup z poradnikami do gier ttp.zone i ttpzone.pl
Go to the top of the page
+Quote Post
kefirek
post 29.08.2009, 16:57:40
Post #8





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

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


Tak powinno działać. Sprawdzałem i działa.
  1. SET @i:=0;
  2. SET @ile:=4;
  3. SELECT * FROM (
  4. SELECT *,
  5. @i:=@i+1,
  6. IF(@i % @ile = 0,1,@i % @ile) AS liczba
  7. FROM numery) AS tabela ORDER BY liczba


Ten post edytował kefirek 29.08.2009, 17:06:36
Go to the top of the page
+Quote Post
wookieb
post 29.08.2009, 17:05:29
Post #9





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Mnie udało się to zrobić w taki sposób
  1. SET @num=1, @prev=0;
  2. SELECT
  3. a.*,
  4. IF(@prev<foo, @num:=1, @num:=@num+1),
  5. @num AS num,
  6. IF(@prev<foo, @prev:=foo, NULL)
  7. FROM
  8. (SELECT * FROM test ORDER BY foo)
  9. a ORDER BY num, foo


Jak widzisz, potrzeba ci będzie w bazie dodatkowa kolumna. Dzięki temu nie będzie już takiego zapytanie tylko zwykle
  1. ORDER BY dodatkowa_kolumna, numery


Jak to działa:
Chodzi o ponumerowanie kolejny wystąpień tych samych numerów. Tak więc wyglądałoby to tak
numer | kolejnosc
1 | 1
1 | 2
1 | 3
1 | 4
2 | 1
2 | 2
3 | 1
3 | 2
4 | 1

teraz jak posortujesz wzgledem "kolejnosc, numer" wyjdzie ci coś takiego

numer | kolejnosc
1 | 1
2 | 1
3 | 1
4 | 1
1 | 2
2 | 2
3 | 2
1 | 3
1 | 4


Ten post edytował wookieb 29.08.2009, 17:18:38


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 07:20