Seite 1 von 2
SQL - username anhand post_id auslesen
Verfasst: 02.10.2008 22:37
von mark2
Hallo
Ich bastle gerade an einer neuen Seite, die sich Daten aus der Tabelle "BENZINPREISE_TABLE" holt. In dieser Tabelle speichere ich die user_id als poster_id.
Ich bekomme es aber nicht hin den usernamen richtig aus der Tabelle "users_table" mit der poster_id der Tabelle "BENZINPREISE_TABLE" auszulesen.
Ich kann zwar Daten aus dem users_table holen aber diese werden nicht richtig zugewiesen.
Was habe ich an meiner zweiten SQL vermukst ?
Meine php
Zudem Funktioniert das Sortieren der Liste nicht richtig.
Z.B.: Es wird die Zahl "8915" kleiner eingestuft als "987"
Thx.
Verfasst: 03.10.2008 13:56
von S2B
Lass einfach das erste Query weg und nimm nur das zweite. Dann sollte es passen.

Verfasst: 03.10.2008 23:00
von mark2
Danke! es funktioniert
Kannst du mir auch sagen wie ich den Inhalt nach 24h oder nach Ablauf einer Zeit automatisch löschen kann ?
Also so etwas ähnliches wie das topic purning
Verfasst: 04.10.2008 02:42
von gn#36
Entweder du richtest einen Cron Job ein der alle x Stunden/Minuten/Tage aufgerufen wird und dann die entsprechenden Deletes durchführt (DELETE FROM ... WHERE x, das wäre dann natürlich nicht exakt nach der festgelegten Zeit sondern erst ein wenig später) oder du baust in das Skript direkt eine Abfrage ein die das erledigt. Dafür brauchen deine Datensätze einen Timestamp (sonst weiß man ja nicht wann man sie löschen darf) und dann etwas in dieser Art:
Code: Alles auswählen
$sql = "DELETE FROM tabelle WHERE timestamp < " . (time() - 86400);
86400 ist dabei die Zeit in Sekunden die seit Erstellung des Eintrags vergangen sein müssen damit er gelöscht wird.
Verfasst: 04.10.2008 22:40
von mark2
Oh weh.
Dadurch wird ja die ganze Zeile aus dem Table gelöscht.
[EDIT]
Da ich nur einzelne Zellen einer Zeile löschen möchte und andere Zellen noch brauche habe ich die update Funktion genommen und schreibe einfach ein Leerzeichen rein.
Nur hab ich jetzt ein Problem.
Die Seite wird aufgebaut und wirft alle, auch die alten Daten aus weil das überschreiben alter Werte hinter dem Seitenaufbau stattfindet. Die Werte werden zwar beim Aufrufen der Seite gelöscht, aber das sieht man erst wenn man die Seite aktualisiert. mist
Kann ich das irgendwie umgehen ?
Oder muss ich eine weitere sql davor erstellen hinter die ich das purning mache und dann erneut mit dem bisherigem sql query die Daten nochmal hole. Wenn ich das überhaupt hin bekomme.
Neuer Code
Verfasst: 04.10.2008 23:31
von Miriam
Zwischenfrage: Wieso möchtest Du denn prunen? Sammle die Preise doch und dann kannst Du es über (meinethalben) ein Jahr auswerten.
Die Abfrage beschränkst Du dann eben auf die Zeit ->
Code: Alles auswählen
SELECT * FROM table WHERE timestamp > (UNIXTIMESTAMP() - 86400);
Oder Du suchst nur immer die neuesten Preise raus. Also aus jeder Sparte.
Verfasst: 05.10.2008 00:42
von mark2
Ich wollte es möglichst einfach und klein halten um die Datenbank nicht unnötig zu füllen. War für mich auch einfacher zu machen die Preise immer in die gleiche Zeile zu schreiben. Sonst müsste ich ja bei jedem senden die id erweitern und mit sql insert arbeiten.
So habe ich jetzt nur eine Tabelle mit 11 Spalten und 12 Zeilen in denen sich alles abspielt.
Verfasst: 05.10.2008 22:02
von mark2
Wie kann ich dann die time Abfrage in meine einbauen.
So funktioniert es nicht. Da springt er sofort auf die message_die
$sql = "SELECT a.*, b.*
FROM ".USERS_TABLE." a, ".BENZINPREISE_TABLE." b
WHERE b.poster_id = a.user_id
AND b.post_time > (UNIXTIMESTAMP() - $purne_time);
ORDER BY $order_by";
if( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Fehler bei der Usernamen Bestimmung', '', __LINE__, __FILE__, $sql);
}
Verfasst: 05.10.2008 23:10
von Miriam
Wenn das der
Code ist, den Du verwendest, dann kann er meiner Meinung nach auch nicht funktionieren... Zumindest nicht so, wie Du es haben willst.
Du hast ein paar SELECTS drin und ein UPDATE auf ein paar Zeilen der Tabelle.
Aber das eine UPDATE "löscht" alle Daten.
Oder habe ich da was falsch gelesen?
Verfasst: 05.10.2008 23:30
von mark2
Ne. Das update löscht mir nur 8 Zellen in Jeder Zeile wo das Datum älter als $purne_time ist. Die Tabelle hat jedoch 11 Spalten. So bleiben mir also in jeder Zeile nach dem update meine wichtigen Daten in den anderen 3 Zellen stehen.
Der code funktioniert ansich nicht schlecht. Nur müsste jeder der die Seite aufruft sofort einen refresh machen um die Änderungen des purne bzw sql update zu sehen.
Hab schon überlegt einen refresh einzubauen. Aber dadurch wird die Seite endlos geladen. Auch nicht das wahre. Zudem würde man das alte noch 10 Sekunden sehen und dann ist es weg. Ist für den user etwas verwirrend.
Code: Alles auswählen
$template->assign_vars(array(
'META' => '<meta http-equiv="refresh" content="10"; URL=' . append_sid("http://phpbb root url/viewonline.php", true) . '">')
);
Deine Idee, die Daten wo älter als die purne_time sind erst garnicht zu holen ist sehr gut. Nur wie mit meinem $sql = "SELECT a.*, b.* kombinieren ?
Habe nochmal den aktuellen Stand hochgeladen (Siehe mein 3. Beitrag)