phpbar.de logo

Mailinglisten-Archive

Zufallssortierung?

Zufallssortierung?

echnaton echnaton at achetaton.net
Mit Jun 16 09:04:36 CEST 2004


Hallo,

wie wär´s mit

zusätzliche Spalte sortierung einfügen,
sortierung=id (oder Spalte mit aufsteigenden 
Zahlenwerten für alphabetische Sortierung) setzen,
außerdem zusätzliche Tabelle hilfstabelle anlegen 
(3 Spalten / 1 Zeile: minsortierung, 
maxsortierung, idminsortierung),
hilfstabelle.minsortierung=min(tabelle.sortierung), 
hilfstabelle.maxsortierung=max(tabelle.sortierung), 
hilfstabelle.idminsortierung = entsprechende 
tabelle.id setzen:

Tabelle: id - inhalt - sortierung
1	A	1
2	B	2
3	C	3
4	D	4
5	E	5

Hilfstabelle: minsortierung - maxsortierung - idminsortierung
1	5	1


dann bei jedem Aufruf:

UPDATE hilfstabelle RIGHT JOIN tabelle ON 
hilfstabelle.minsortierung=tabelle.sortierung
SET 
hilfstabelle.minsortierung=min(tabelle.sortierung), 
hilfstabelle.maxsortierung=max(tabelle.sortierung);

UPDATE hilfstabelle INNER JOIN tabelle ON 
hilfstabelle.minsortierung=tabelle.sortierung
SET hilfstabelle.idminsortierung=tabelle.id;

UPDATE tabelle LEFT JOIN hilfstabelle ON 
tabelle.sortierung=hilfstabelle.maxsortierung
SET tabelle.sortierung=tabelle.sortierung-1 WHERE 
tabelle.id<>hilfstabelle.idminsortierung;

Tabelle beim ersten Aufruf: id - in halt - sortierung
1	A	1
2	B	1
3	C	2
4	D	3
5	E	4

UPDATE tabelle INNER JOIN hilfstabelle ON 
tabelle.id=hilfstabelle.idminsortierung
SET tabelle.sortierung=hilfstabelle.maxsortierung;

Tabelle beim ersten Aufruf: id - in halt - sortierung
1	A	5
2	B	1
3	C	2
4	D	3
5	E	4


Zweiter Aufruf:
Hilfstabelle: minsortierung - maxsortierung - idminsortierung
1	5	2
Tabelle: id - inhalt - sortierung
1	A	4
2	B	1
3	C	1
4	D	2
5	E	3

dann
.	.	.
2	B	5
.	.	.
.	.	.
.	.	.

usw.

Problematisch sind natürlich INSERTS.
Vermutlich muss nach jedem INSERT in der 
kompletten Tabelle wieder Sortierung = id gesetzt 
werden.
Dann finge die Sortierung nach jedem INSERT wieder bei A an - wäre das schlimm?


ALLES UNGETESTET und leider auch etwas umständlich :-(
Wenn man den Inhalt der Hilfstabelle stattdessen 
in Variablen packt (sind ja nur 3 kleine...) wäre 
es aber wohl schon einfacher...

Und vielleicht hat ja jemand eine bessere Idee? :-)


Gruß

Christiane und Richard



>Hallo Liste,
>
>Ich muß für einen Internetauftritt Anbieterlisten darstellen, der Kunde
>wünscht eine sogenannte 'rollierende' Sortierung, d.h. es darf nicht
>immer von A - Z sortiert werden, sondern soll entweder durchwechselnd,
>oder per Zufall A-B-C...Z, das nächste mal B-C-D...A, dann C-D-E...B
>usw. sortiert werden.
>Hat jemand damit schon mal zu tun gehabt?
>Das Problem ist, daß eh schon eine recht dicke Suche zum Aufruf der
>Daten notwendig ist, ich möchte jetzt nicht auch noch alles in Arrays
>laden und per Index abarbeiten - wenn's geht.
>
>Für jede Hilfe super dankbar!
>
>Hermann
>
>
>--
>Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
>-->>  http://www.4t2.com/mysql

-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 


php::bar PHP Wiki   -   Listenarchive