Sortieren

Hi,

habe mehrere variablen mit Werten im positiven und negativen Bereich. Würde diese gerne sortieren.

Hat da jemand eine gute Funktion oder ähnliches. Wo kann man so etwas nachlesen.

Hallo,

http://www.modulepool.com/java-pool/Beispiele/bubble…
http://www.modulepool.com/java-pool/Beispiele/quicks…

beschreibt 2 bekannte Sortieralgorithmen (…in Java).
Ich glaube es gibt in php schon fertige Sortierfunktionen.
Schau mal unter
http://www.php.net/manual/en/ref.array.php

Gruss
Patrick

Hi!
hab keine Lösung, aber ein ähnliches Problem:
Ich lese aus einer Datenbank Werte aus (nicht nur Zahlen, sondern auch Worte) und möchte diese nun geordnet ausgegeben haben. wenn ich in den auslesesyntax ORDER BY schreibe tut sich leider nix :frowning:
Hat jemand einen Tip wie ich das mache?
MfG
Timo

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

HI…
Ich glaub am besten ist es, die Variablen in ein Array zu
schreiben und sie dann zu sortieren. schon seit php3 gibt
einige array - Sortierfunktionen:

arsort
asort
ksort
krsort
rsort
sort
uasort
uksort
usort

Such am besten bei Google nach den Implementierungen… Sie
sind zwar ganz einfach…aber zu viel um sie hier her zu
schreiben…

Grüße und gutes Gelingen
Fabian

die ORDER BY funktion ist eigentlich schon die richtige und schnellste lösung, um daten sortiert aus der datenbank zu lesen.
man muss natürlich noch die spalte(n) angeben nach der/denen sortiert werden soll.
etwa so:

SELECT name, vorname, sonstirgendwas FROM gruppe ORDER BY name, vorname

hier wird zuerst aufwärts nach name sortiert und wenn es gleiche namen gibt, werden die nach vorname sortiert.

möchte man abwärts sortieren sähe das so aus:

SELECT name, vorname FROM gruppe ORDER BY name DESC, vorname DESC

gruss
ric

Hi!
hab keine Lösung, aber ein ähnliches Problem:
Ich lese aus einer Datenbank Werte aus (nicht nur Zahlen,
sondern auch Worte) und möchte diese nun geordnet ausgegeben
haben. wenn ich in den auslesesyntax ORDER BY schreibe tut
sich leider nix :frowning:
Hat jemand einen Tip wie ich das mache?
MfG
Timo

die ORDER BY funktion ist eigentlich schon die richtige und
schnellste lösung, um daten sortiert aus der datenbank zu
lesen.
man muss natürlich noch die spalte(n) angeben nach der/denen
sortiert werden soll.
etwa so:

SELECT name, vorname, sonstirgendwas FROM gruppe ORDER BY
name, vorname

hier wird zuerst aufwärts nach name sortiert und wenn es
gleiche namen gibt, werden die nach vorname sortiert.

möchte man abwärts sortieren sähe das so aus:

SELECT name, vorname FROM gruppe ORDER BY name DESC, vorname
DESC

gruss
ric

Hi!
Also, wenn ich aus ner Datenbank mehrere Sachen auslese, mach ich des ja nach einer ID. Ich lass da immer eine variable hochzählen und lass mir dann die entsprechende Reihe ausgeben in einem Array:

for ($zaehler=1; $zaehler ausgabe in tabelle
}

das heisst, dass ich die einelnen Werte ja gar net zum Vergleichen hab um sie zu ordnen! Da muss ich das ganze anders auslesen, oder? Und wenn ja, wie mach ich des??
MfG
Timo

wenn ich das richtig sehe, holst du jedesmal nur einen einzigen datensatz aus der datenbank und fügst ihn dann in deine html-tabelle ein, aber du gehst sämtliche datensätze durch?!?

das ist natürlich möglich so, aber wenn man viele datensätze in der datenbank hat, ist das ganz und gar nicht performant, da für jeden einzelnen datensatz ein sql-kommando abgesetzt wird. normalerweise macht man das mit einem einzigen sql-kommando, was ungleich schneller ist!

in deinem fall wäre das schlicht:
SELECT * FROM table ORDER BY id
hier ist die sortierung dann natürlich die selbe wie wenn du deine schleife verwenden würdest. willst du nach einer anderen spalte sortieren, einfach id ersetzen (z.B. name).

was du dann zurückkriegst ist die komplette tabelle in $result.
jetzt kannst du bequem die tabelle durchgehen:

while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
// datensatz für datensatz
-> ausgabe in tabelle
// in der reihenfolge, wie im select angegeben :o)
}

ich hoffe, das war einigermassen verständlich.

gruss
ric

Hi!
Also, wenn ich aus ner Datenbank mehrere Sachen auslese, mach
ich des ja nach einer ID. Ich lass da immer eine variable
hochzählen und lass mir dann die entsprechende Reihe ausgeben
in einem Array:

for ($zaehler=1; $zaehler ausgabe in tabelle
}

das heisst, dass ich die einelnen Werte ja gar net zum
Vergleichen hab um sie zu ordnen! Da muss ich das ganze anders
auslesen, oder? Und wenn ja, wie mach ich des??
MfG
Timo

wenn ich das richtig sehe, holst du jedesmal nur einen
einzigen datensatz aus der datenbank und fügst ihn dann in
deine html-tabelle ein, aber du gehst sämtliche datensätze
durch?!?

das ist natürlich möglich so, aber wenn man viele datensätze
in der datenbank hat, ist das ganz und gar nicht performant,
da für jeden einzelnen datensatz ein sql-kommando abgesetzt
wird. normalerweise macht man das mit einem einzigen
sql-kommando, was ungleich schneller ist!

in deinem fall wäre das schlicht:
SELECT * FROM table ORDER BY id
hier ist die sortierung dann natürlich die selbe wie wenn du
deine schleife verwenden würdest. willst du nach einer anderen
spalte sortieren, einfach id ersetzen (z.B. name).

was du dann zurückkriegst ist die komplette tabelle in
$result.
jetzt kannst du bequem die tabelle durchgehen:

while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
// datensatz für datensatz
-> ausgabe in tabelle
// in der reihenfolge, wie im select angegeben :o)
}

ich hoffe, das war einigermassen verständlich.

gruss
ric

THX
War verständlich :smile:. Musste zwar das MYSQL_ASSOC weglassen (was auch immer des bringt…) aber tut.
Hab zwar schon wieder das nächste Problem, aber jetzt will ich auch mal selber tüfteln :smiley:
MfG
Timo

THX
War verständlich :smile:. Musste zwar das MYSQL_ASSOC weglassen
(was auch immer des bringt…) aber tut.
Hab zwar schon wieder das nächste Problem, aber jetzt will ich
auch mal selber tüfteln :smiley:
MfG
Timo

MYSQL_ASSOC ist die option, die ich immer verwende. da kann man auf die daten eines datensatzes per feld-namen zugreifen. (z.b. $row[„name“]). die andere einstellung ist MYSQL_NUM. der zugriff erfolgt über die feld-id (z.b. $row[2]). hier ist man aber auf die reihenfolge festgelegt und hat dann ein problem, sobald man in der tabelle nachträglich ein feld einfügt, sodass sich die felder-reihenfolge verschiebt (z.b. ein neues feld „anrede“, welches man vor dem feld „name“ haben will…)

lässt man diese option komplett weg, sind standardmässig beide möglichkeiten aktiv. das wusste ich bis gerade eben auch nicht :smile:

gruss
ric