SQL - username anhand post_id auslesen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
mark2
Mitglied
Beiträge: 454
Registriert: 22.02.2006 23:05
Wohnort: Kempten

SQL - username anhand post_id auslesen

Beitrag 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.
Gruß Markus
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag von S2B »

Lass einfach das erste Query weg und nimm nur das zweite. Dann sollte es passen. :wink:
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
Benutzeravatar
mark2
Mitglied
Beiträge: 454
Registriert: 22.02.2006 23:05
Wohnort: Kempten

Beitrag 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
Gruß Markus
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag 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.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
mark2
Mitglied
Beiträge: 454
Registriert: 22.02.2006 23:05
Wohnort: Kempten

Beitrag 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
Gruß Markus
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag 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.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
mark2
Mitglied
Beiträge: 454
Registriert: 22.02.2006 23:05
Wohnort: Kempten

Beitrag 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.
Gruß Markus
Benutzeravatar
mark2
Mitglied
Beiträge: 454
Registriert: 22.02.2006 23:05
Wohnort: Kempten

Beitrag 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);
}
Gruß Markus
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag 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?
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
mark2
Mitglied
Beiträge: 454
Registriert: 22.02.2006 23:05
Wohnort: Kempten

Beitrag 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)
Gruß Markus
Antworten

Zurück zu „Coding & Technik“