MySQL: Datensatz davor und danach
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ahnung
antworten
array
aufgabe
button
code
dank
darstellung
datensatz
differenz
frage
funktion
helfen
idee
lesbarkeit
limit
ordern
problem
tabelle
verwenden
-
Hallo zusammen,
es dreht sich hier um folgendes Problem:
Ein Datensatz aus einer Tabelle ist bekannt (id,zeit,…). Nun soll der Datensatz direkt davor und der direkt danach ausgeliefert werden.
Mein bisheriger Ansatz sieht vor die zeitliche Differenz zwischen dem bekannten und den unbekannten Posts zu errechnen und nach der Differenz zu ordnen. Als Ergebnis dienen dann die ersten beiden Datensätze (der bereits bekannte ausgeschlossen).
Leider gibt es Probleme, bei meinem Ansatz. (Es liegt keine gleichmäßige Zeitdifferenz vor)
Das Ziel ist es einen vor- und einen zurück-Button auf einer Seite einzubauen.
Bitte keine Antworten dazu, wie das Problem mit zwei Datenbankanfragen gelöst werden kann.
thx,
tuvalu -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Das ist nen bissl knifflig, finde ich.
Also ich gehe davon aus, dass du deine Datenbankabfrage in einen Array speichern lässt und diesen dann auf eine bestimmte Art und Weise ausgibst/verarbeitest.
Ungefähr so:
function make_db_read($table, $collist, $condition) { make_db_connection(); if(empty($condition)) { $read_qry = mysql_query("SELECT $collist FROM $table ORDER BY ID DESC"); } else { $read_qry = mysql_query("SELECT $collist FROM $table WHERE $condition ORDER BY ID DESC") ; } mysql_close(); return $read_qry; }
Mit diesem Array kann man dann machen, was man will. Ich kann mir vorstellen, dass du dann aus diesem Array den ersten Eintrag ausliest,wie du dir das vorstellst. Mit dem Button klick den Array mitübergibst und eine Zählvariable, die dir die Position mitteilt. Das müsste eig. klappen.
Sorry, dass ich jetzt keinen Code zur Hand habe, aber deine Frage war ja auch eher auf eine Idee und nicht auf Code abgezielt... denke ich mal!
Im Übrigen: Den Code habe ich in einem Tutorial gefunden und fand die Idee klasse. Siehe unter: http://www.teialehrbuch.de/Kostenlose-Kurse/SQL/14822-Eine-Bibliothek-zum-Datenbankzugriff.html
Beitrag geändert: 2.9.2008 11:26:18 von cdas -
Hallo,
wenn ich mal nicht rate was du wirklich möchtest, dann würde ich sagen, die Aufgabe ist unlösbar. Du schreibst, dass du nur einen Datensatz kennst
Ein Datensatz aus einer Tabelle...
und möchtest einen weiteren erhalten, ohne nochmals auf die Datenbank zuzugreifen.
Bitte keine Antworten dazu, wie das Problem mit zwei Datenbankanfragen gelöst werden kann
Das scheint mir unmöglich.
Gruß
Manni
-
Wenn du nach der ID fahndest musst du einfach nur nach ID sortieren, "where id=$id-1" "limit=3" und eine sortierung reinmachen...
Du müsstest mehr Infos geben nach welchen eintrag du fahndest (nach ID oder was?) und wie die aufgebaut ist.
Wenn du nach ID oder so machst kannst du einfach die oben beschriebene lösung nehmen.
P.S.
@cdas: Man kann und darf auch in Codetags einen Zeilenumbruch verwenden. Das würde 1. Der lesbarkeit und 2tens der darstellung der Seite helfen.
nebenbei ist dies keine array sondern eine Funktion.
Man merkt das du das aus einem Tutorial geklaut hast und keine Ahnung hast was du hier Postest.
Für mich reiner Guldenspam -.-
Beitrag geändert: 2.9.2008 6:36:12 von mergener -
mergener schrieb:
P.S.
@cdas: Man kann und darf auch in Codetags einen Zeilenumbruch verwenden. Das würde 1. Der lesbarkeit und 2tens der darstellung der Seite helfen.
Ohja, das ist mir eben auch aufgefallen. Wird nachbearbeitet.
mergener schrieb:
nebenbei ist dies keine array sondern eine Funktion.
Ich muss dich leider korrigieren. Du hast zwar recht, dass ich nur eine Funktion gepostet habe. Aber, wie am Ende zu sehen ist, wird "return $read_qry" ausgeführt. Was ich zu meiner Scham nicht gesagt habe, aber einfach vorrausgesetzt habe, dass man doch den Rückgabewert der Funktion in seinem Skript in eine Variable speichert. Diese Variable ist dann vom Datentyp Array.
mergener schrieb:
Man merkt das du das aus einem Tutorial geklaut hast und keine Ahnung hast was du hier Postest.
Für mich reiner Guldenspam -.-
Danke für die Blumen. "Postest" schreibt man klein, weil es ein Verb ist.
-
Danke für die Vorschläge.
Die Idee von cdas habe ich nicht nachvollziehen können.
Die Idee von mergener (mit den id's) geht rein logisch nicht. Ich hatte nicht erwähnt, dass es noch zusätzliche WHERE-Bedingungen gibt, mit denen einige Datensätze ausgesiebt werden.
Wie bandi999 schrieb, die Aufgabe sei unmöglich – dem muss ich zustimmen für den Fall, dass man wirklich nur ein einziges SELECT-Statement hat. (Das Gegenteil gilt es zu zeigen)
Mein vereinfachter Ansatz ist der folgende (mittels UNIQUE):
$q=mysql_query( '( SELECT *,(zeit-'.$timestamp.') AS zeitdiff FROM artikel WHERE (zeit-'.$timestamp.')<0 ORDER BY zeitdiff DESC LIMIT 1 ) UNION ( SELECT *,(zeit-'.$timestamp.') AS zeitdiff FROM artikel WHERE (zeit-'.$timestamp.')>0 ORDER BY zeitdiff ASC LIMIT 1 )' );
Wenn jemand eine schnellere/bessere Lösung hat, immer her damit!
-
Wenn es unverständlich war, dann tut es mir leid. Kann ja auch sein, dass ich deine Frage nicht richtig verstanden habe.
Ich dachte, dass du eine Seite hast, wo du einen Datensatz ausgibst. Aber mit vor- und zurück-Buttons die Datensätze chronologisch durchklicken willst. Ist das korrekt?
Meine Idee zielte darauf ab, dass du mit einer initialen Datenbankabfrage, alle möglichen Daten ausliest und in einen Array speicherst. Diesen kannst du dann mit PHP auslesen und ausgeben.
Man hat die Möglichkeit mit html-Formularen Variablen zu übergeben. So hast du auch nach jedem Klick auf zB den Vor-Button die anderen Datensätze, auch wenn sie nicht angezeigt werden.
Ich hab keine Ahnung, ob ich auch einfach nur an dir vorbei rede und eine völlig falsche Vorstellung von dem habe, was du eigentlich willst.
Beitrag geändert: 2.9.2008 16:24:48 von cdas -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage