Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Mieszane sortowanie
Forum PHP.pl > Forum > Bazy danych > MySQL
Daimos
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
wookieb
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
erix
http://nospor.pl/news/show/id/25/
Daimos
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
kefirek
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
wookieb
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.
Daimos
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
kefirek
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
wookieb
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
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.