Daten sortieren vor Ausgabe

PHP, Ajax, CSS, HTML, Javascript
Eben für die wirklich Harten, die alles selber machen.
Antworten
Benutzeravatar
shadowrider
Beiträge: 473
Registriert: Mi 18.Aug, 2004 12:56
Wohnort: Schelklingen-Schmiechen
Kontaktdaten:

Daten sortieren vor Ausgabe

Beitrag von shadowrider »

da ich keinen passenden Mod fand, habe ich mir mal einen 'umgebaut'.

folgendes Problem:
die Daten werden original absteigend nach einem, per sql-eingelesenem, Feld sortiert.

Ich möchte aber die Ausgabe sortiert nach einem berechneten Feld erreichen,
genaugenommen nach $g2 absteigend, errechnet in Zeile 84-93.

(habe mich zwar erfolgreich durch die Zeitberechnungen gekämpft, durchschaue aber die Array-Geschichte nicht)

ich hänge die php mal hier an in der Hoffnung, jemand hilft mir aus der Klemme....
Dateianhänge
admin_users_inactive.zip
(4.6 KiB) 384-mal heruntergeladen
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Du kannst auch in einer Sortieranweisung (ORDER BY) in SQL berechnen und dann kommen die Datensätze auch nach den Ergebnissen sortiert zurück...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
shadowrider
Beiträge: 473
Registriert: Mi 18.Aug, 2004 12:56
Wohnort: Schelklingen-Schmiechen
Kontaktdaten:

Beitrag von shadowrider »

das Feld gibt es ja vorher noch nicht, der Wert wird ja erst durch einige Operationen errechnet
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Kann das nicht mit den Werten der restlichen Felder errechnet werden?
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
shadowrider
Beiträge: 473
Registriert: Mi 18.Aug, 2004 12:56
Wohnort: Schelklingen-Schmiechen
Kontaktdaten:

Beitrag von shadowrider »

ähm - ja, wohl doch, denn ich errechne es ja damit, aber wie bring ich den ganzen Komplex in die sql-Abfrage?

Code: Alles auswählen

$g = $row['user_lastlogon'];
  if ($row['user_lastlogon'] == 0) $g = $row['user_regdate'];

$t = time();      
        $gMonth = date("n", $g);
        $tMonth = date("n", $t);
        $gYear = date("Y", $g);
        $tYear = date("Y", $t);

        $g2 = (($tYear - $gYear) * 12) + ($tMonth - $gMonth);
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Öhm, nun, es werden datenbankfremde Daten herangezogen, das klappt dann nicht.
Also bliebe nur noch sort() oder auch ksort() über...

Hast Du ein mehrdimensionales Array oder ein einfaches?
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
shadowrider
Beiträge: 473
Registriert: Mi 18.Aug, 2004 12:56
Wohnort: Schelklingen-Schmiechen
Kontaktdaten:

Beitrag von shadowrider »

wenn ich alles richtig übersehe, ist es ein mehrdimensionales

(es werden ja mehrere felder übergeben)
Zuletzt geändert von shadowrider am Mi 11.Okt, 2006 19:18, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Entscheidungshilfe:
Eindimensionale Arrays besitzen einen Key.
Z. B. $lang['Username']
Mehrdimensionale Arrays besitzen mehrere Schlüssel:
$lang['Username']['Realname'] (mal hier ein zweifaches frei erfunden).
Welche Art wird also bei Dir verwendet?
Wenn es ein mehrdimensionales Array ist, mit der Berechnung als ersten Schlüssel, wäre die Sortierung einfach...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
shadowrider
Beiträge: 473
Registriert: Mi 18.Aug, 2004 12:56
Wohnort: Schelklingen-Schmiechen
Kontaktdaten:

Beitrag von shadowrider »

also mehrdimensional:

Code: Alles auswählen

$template->assign_block_vars("Table_InactiveUsers", array(
			"ROW_CLASS" => $row_class,
			"ROW_CLASS_ALERT" => $row_class_alert,
			"NUMBER" => $i +1,

			"USERNAME" => $row['username'], usw.
der Schlüssel, nach welchem ich sortieren will, wäre der 7.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

???
Nicht die Übergabe an ein Template kann sortiert werden, sondern nur ein Array!
Was "soll" denn nun sortiert werden???
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
shadowrider
Beiträge: 473
Registriert: Mi 18.Aug, 2004 12:56
Wohnort: Schelklingen-Schmiechen
Kontaktdaten:

Beitrag von shadowrider »

dann wird offenbar Zeile für Zeile bearbeitet und an das Template übergeben?

da müsste ja das ganze völlig anders laufen, vor der Übergabe sammeln und dann sortieren und erst dann an das Template - das ist zu fett für mich, da muss ich wohl die Finger von lassen

oder ist es möglich, direkt nach
$sql = "SELECT....
den gesamten Datensatz zu sortieren?
Zuletzt geändert von shadowrider am Do 12.Okt, 2006 08:09, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Öh, sofern ein Datensatz gelesen und übergeben wird nicht.
Dann muss wirklich erst alles ausgelesen und dann sortiert werden.
Aber ich kenne ja bislang auch nur ein Bruchstück dessen, was Du da bearbeitest. Vielleicht ist es einfacher, als ich jetzt rätzeln kann, was Du genau willst...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
shadowrider
Beiträge: 473
Registriert: Mi 18.Aug, 2004 12:56
Wohnort: Schelklingen-Schmiechen
Kontaktdaten:

Beitrag von shadowrider »

Vielleicht ist es einfacher, als ich jetzt rätzeln kann
nun, ich dachte eigentlich ich hätte es am Anfang sehr genau beschrieben?
(und die Datei mit angehängt)
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Oh, sorry, komplett übersehen :!:

Also:
Wenn Du

Code: Alles auswählen

ORDER BY user_lastlogon ASC
gegen

Code: Alles auswählen

ORDER BY ".time()." - user_lastlogon DESC
tauschen würdest, müsste die Sortierung die gewünschte sein.
Denn was macht die Berechnung:
Sie ermittelt ja die Monate vom letzten Login bis jetzt.
Und mit der Berechnung time() - user_lastlogon wird ja auch die Differenz zwischen jetzt und dem letzten Login ermittelt.
Aufsteigend sortiert (ASC) würde der User mit der kürzesten Inaktivität "oben" stehen, bei absteigender Sortierung (DESC), so wie ich das jetzt mal gemacht habe, der mit der längsten Offline-Zeit.
Nach der Abfrage werden dann auch weiter brav die Monate berechnet. Das ist ja dann okay, da die User bereits sortiert vorliegen...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
shadowrider
Beiträge: 473
Registriert: Mi 18.Aug, 2004 12:56
Wohnort: Schelklingen-Schmiechen
Kontaktdaten:

Beitrag von shadowrider »

das geht gemeinerweise eben nicht, denn erst bringt er alle User, deren Logon = "" ist, danach sortiert er mir die anderen richtig
(deswegen habe ich ja in meiner Berechnung:
if ($row['user_lastlogon'] == 0) $g = $row['user_regdate'];
weil es sonst gar nicht funktioniert
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ach ja. Dann muss noch eine Bedingung rein:

Code: Alles auswählen

AND user_lastlogon <> 0 AND user_lastlogon IS NOT NULL
Dann werden alle "nie" angemeldeten User ausgegrenzt.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
shadowrider
Beiträge: 473
Registriert: Mi 18.Aug, 2004 12:56
Wohnort: Schelklingen-Schmiechen
Kontaktdaten:

Beitrag von shadowrider »

die sollen ja nicht ausgegrenzt werden, denn ich möchte bei denen ebenfalls nach inaktiver zeit x eine Erinnerungsmail senden und später rauswerfen - deshalb verwende ich bei Logon "" das Registrierungsdatum, so habe ich auch für diese Leute im Blick wie lange schon 'tote Hose' ist
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Also die Sortierung erweitern:

Code: Alles auswählen

ORDER BY CASE user_lastlogon WHEN NULL THEN user_regdate ELSE user_lastlogon END DESC
Damit wird eben gesagt, wenn user_lastlogon NULL ist, nimm das user_regdatum und anschliessend wird sortiert.
Sofern ich jetzt keine Tippfehler drinnen habe, sollte das dann gehen und alle User in einer "Linie" sortieren...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
shadowrider
Beiträge: 473
Registriert: Mi 18.Aug, 2004 12:56
Wohnort: Schelklingen-Schmiechen
Kontaktdaten:

Beitrag von shadowrider »

ist doch ein Scheibenkleister
vorher war
logon = "" absteigend, dann logon <> "" absteigend

jetzt sortiert er:
logon <> "" aufsteigend, dann logon = "" absteigend
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Und so?

Code: Alles auswählen

ORDER BY CASE user_lastlogon WHEN NULL THEN user_regdate ELSE user_lastlogon DESC END
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
shadowrider
Beiträge: 473
Registriert: Mi 18.Aug, 2004 12:56
Wohnort: Schelklingen-Schmiechen
Kontaktdaten:

Beitrag von shadowrider »

ne ne, deine Syntax-Kenntnisse sind schon ok

beim 2 Versuch gibt es einen Syntaxfehler
Antworten