Datensatz nach Tag auswaehlen

Datensatz nach Tag auswaehlen

am 20.12.2005 22:32:17 von Stephan Kolbius

Hallo,

ich habe eine MySql Datenbank mit n Datensaetzen.

Die Struktur sieht so aus:

id, text

Wie kann ich nun jeden Tag einen anderen Datensatz (id) auswählen, welche
sich den ganzen Tag halten soll, und wenn der letzte Datensatz erreicht ist,
wieder von vorne anfängt?

Weiss da jemand einen Rat?

Vielen Dank für eine Antwort, Stephan

Re: Datensatz nach Tag auswaehlen

am 21.12.2005 00:28:55 von Niels Braczek

Stephan Kolbius schrieb:

> ich habe eine MySql Datenbank mit n Datensaetzen.
> Die Struktur sieht so aus:
>
> id, text
>
> Wie kann ich nun jeden Tag einen anderen Datensatz (id) auswählen, welche
> sich den ganzen Tag halten soll, und wenn der letzte Datensatz erreicht ist,
> wieder von vorne anfängt?
>
> Weiss da jemand einen Rat?

Speichere die Information, welchen Datensatz du benutzt. Verwende diese
Information.

Beispiel: Ergänze die Tabelle um eine DATE-Spalte `viewed`. Hole den
Datensatz mit heutigem Datum. Wenn nicht vorhanden, nimm den mit dem
niedrigsten Datum (LIMIT 1) und markiere ihn in der DB entsprechend.

MfG
Niels

--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
`----------------------------------------------------------- -----´

Re: Datensatz nach Tag auswaehlen

am 21.12.2005 17:28:59 von The User

Wenn das, was Niels geschrieben hat, nicht geht, dann musst du das mit
PHP lösen. wenn du PHP nicht kannst, wäre es nützlich, wenn du es
lernst. Andernfalls gehe zur Newsgruppe de.comp.lang.php.datenbanken.

Re: Datensatz nach Tag auswaehlen

am 21.12.2005 20:01:32 von Stephan Kolbius

"Niels Braczek" schrieb

> Speichere die Information, welchen Datensatz du benutzt. Verwende diese
> Information.
>
> Beispiel: Ergänze die Tabelle um eine DATE-Spalte `viewed`. Hole den
> Datensatz mit heutigem Datum. Wenn nicht vorhanden, nimm den mit dem
> niedrigsten Datum (LIMIT 1) und markiere ihn in der DB entsprechend.

Vielen Dank für die Antwort, weitergehende Info wäre hilfreich: Wie müsste
die Abfrage denn genau lauten?
Mein erster PHP-Ansatz wäre:
$abfrage = mysql_query("SELECT text FROM $tabellenname WHERE id LIKE 'und
jetzt weiss ich nicht was dahin kommt');

Ist das ein Anfang und der richtige Weg? Wie gesagt, am Ende der Datensätze
soll es wieder von vorne losgehen.

Oder wäre eine andere Group für diese Frage besser?

Vielen Dank,
Gruß Stephan

Re: Datensatz nach Tag auswaehlen

am 21.12.2005 21:27:28 von Stephan Kolbius

"Uli Köhler" schrieb
>Wenn das, was Niels geschrieben hat, nicht geht, dann musst du das mit
>PHP lösen. wenn du PHP nicht kannst, wäre es nützlich, wenn du es
>lernst. Andernfalls gehe zur Newsgruppe de.comp.lang.php.datenbanken.

Eine Frage zu PHP zu beantworten, indem man auf das lernen von PHP hinweist,
und dann noch auf eine News-Group zu verweisen, in der man bereits ist, ist
nicht wirklich sinnvoll.

Gruß
Stephan

Re: Datensatz nach Tag auswaehlen

am 21.12.2005 21:39:38 von Niels Braczek

Stephan Kolbius schrieb:
> "Niels Braczek" schrieb
>
>> Speichere die Information, welchen Datensatz du benutzt. Verwende diese
>> Information.
>>
>> Beispiel: Ergänze die Tabelle um eine DATE-Spalte `viewed`. Hole den
>> Datensatz mit heutigem Datum. Wenn nicht vorhanden, nimm den mit dem
>> niedrigsten Datum (LIMIT 1) und markiere ihn in der DB entsprechend.
>
> Vielen Dank für die Antwort, weitergehende Info wäre hilfreich: Wie müsste
> die Abfrage denn genau lauten?
> Mein erster PHP-Ansatz wäre:
> $abfrage = mysql_query("SELECT text FROM $tabellenname WHERE id LIKE 'und
> jetzt weiss ich nicht was dahin kommt');
>
> Ist das ein Anfang und der richtige Weg?

Nein. Mach einfach, was ich gesagt habe:

$today = date('Y-m-d');
$sql = "SELECT txt FROM $table WHERE viewed='$today'";
$result = mysql_query($sql) or die($sql.'
'.mysql_error());
if ($mysql_num_rows($result)==0) {
$sql = "SELECT id, txt FROM $table ORDER BY viewed LIMIT 1";
$result = mysql_query($sql) or die($sql.'
'.mysql_error());
$sql = "UPDATE id SET viewed='$today'";
mysql_query($sql) or die($sql.'
'.mysql_error());
}
$row = mysql_fetch_assoc($result);
$text = $row['txt'];

> Oder wäre eine andere Group für diese Frage besser?

Nee, du bist hier schon richtig.

MfG
Niels

--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
`----------------------------------------------------------- -----´

Re: Datensatz nach Tag auswaehlen

am 22.12.2005 22:15:02 von Stephan Kolbius

"Niels Braczek" schrieb

> Nein. Mach einfach, was ich gesagt habe:
> $today = date('Y-m-d');
> $sql = "SELECT txt FROM $table WHERE viewed='$today'";
> $result = mysql_query($sql) or die($sql.'
'.mysql_error());
> if ($mysql_num_rows($result)==0) {
> $sql = "SELECT id, txt FROM $table ORDER BY viewed LIMIT 1";
> $result = mysql_query($sql) or die($sql.'
'.mysql_error());
> $sql = "UPDATE id SET viewed='$today'";
> mysql_query($sql) or die($sql.'
'.mysql_error());
> }
> $row = mysql_fetch_assoc($result);
> $text = $row['txt'];

Habe ich gemacht. Es hagelt Parse-Errors. Auch nach dem wegnehmen des
Dollarzeichens bei der num_rows abfrage wird die Datenbank nicht
aktualisiert. Die Verbindung zur Datenbank habe ich natürlich vorher
hergestellt.

Hat jemand noch eine Idee, wie man das anstellen könnte?

Gruß Stephan

Re: Datensatz nach Tag auswaehlen

am 23.12.2005 03:46:41 von Mustafa Korkmaz

"Stephan Kolbius" schrieb im Newsbeitrag
news:do9t97$dki$00$1@news.t-online.com...
> Hallo,
>
> ich habe eine MySql Datenbank mit n Datensaetzen.
>
> Die Struktur sieht so aus:
>
> id, text
>
> Wie kann ich nun jeden Tag einen anderen Datensatz (id) auswählen, welche
> sich den ganzen Tag halten soll, und wenn der letzte Datensatz erreicht
> ist, wieder von vorne anfängt?

Du meinst also er soll z.b. heute mit ID=1 anfangen und jeden Tag die
darauffolgende ID nehmen?
Falls id nicht vollständig und fortlaufend ist, solltest du die Tabelle um
eine Spalte mit auto_increment als fortlaufende Integer-Werte erweitern
(also 1.Zeile = 1, 2.Zeile = 2, n.Zeile = n), ansonsten darfst du auch die
Spalte ID als auto_increment-Spalte verwenden.

Wähle dann ein beliebiges Datum als Startdatum.
zB. $startdatum = mktime(0, 0, 1, 1, 1, 06);
Am 1.1.2006 um 00:00:01 würde das ganze also starten, mit dem
AutoIncrement-Wert 1, 24 Stunden später, also am 2.1.2006 soll die Zeile mit
dem AutoIncrement 2 ausgewählt werden, usw. d.h. die Formel lautet also:
$incrementWert = ceil((time() - $startdatum)/86400); //Ziehe Startdatum vom
aktuellen Timestamp ab und teile durch 24Stunden (86400). Nehme die nächst
grössere ganze Zahl als ID.
Jetzt hätten wir ein Problem, wenn die Datensätze fertig wären und der
nächste IncrementWert nicht existieren würde.
Also erweitern wir die Formel dahingehend dass vom Ergebnis der Modulo vom
Anzahl der Datensätze genommen wird.

$sql = "SELECT count(id) FROM table";

Ergebnis der Abfrage unter $anzahl_datensaetze gespeichert, erweitert die
Formel zu:
$incrementWert = (ceil((time() - $startdatum)/86400) %$anzahl_datensaetze);
// % ist der Modulo-Operator, der immer den Rest einer Divison liefert.


So die SQL-Abfrage ist dann relativ trivial:

$sql = "SELECT txt FROM table WHERE incrementWert='$incrementWert'";

Fertig!

Problem/Anmerkung: Die Spalte mit den Auto-Increment-Werten muss natürlich
gepflegt werden, d.h. wenn du zwischenzeitlich Datensätze entfernst, musst
du darauf achten daß die Werte wieder von 1 - n fortlaufend und ohne
Unterbrechung gefüllt sind... Datensätze hinzufügen wäre aber kein Problem.

Hoffe mal daß es funktioniert (nicht getestet).

Gruß
M.K.

Re: Datensatz nach Tag auswaehlen

am 23.12.2005 23:06:11 von Stephan Kolbius

"Mustafa Korkmaz" schrieb >

> $incrementWert = (ceil((time() - $startdatum)/86400)
> %$anzahl_datensaetze);

Also erstmal vielen Dank, ich bin jetzt einen Schritt weiter, die Abfrage
funktioniert.

Ein Problem habe ich noch, die ID werden nach obiger Anweisung absteigend
sortiert.

Wie kann ich die Anweisung so ändern, dass es aufsteigend geht?

Gruß
Stephan

Re: Datensatz nach Tag auswaehlen

am 24.12.2005 05:24:35 von Mustafa Korkmaz

"Stephan Kolbius" schrieb im Newsbeitrag
news:dohscl$teu$01$1@news.t-online.com...
> "Mustafa Korkmaz" schrieb >
>
>> $incrementWert = (ceil((time() - $startdatum)/86400)
>> %$anzahl_datensaetze);
>
> Also erstmal vielen Dank, ich bin jetzt einen Schritt weiter, die Abfrage
> funktioniert.
>
> Ein Problem habe ich noch, die ID werden nach obiger Anweisung absteigend
> sortiert.
>
> Wie kann ich die Anweisung so ändern, dass es aufsteigend geht?

Welche Anweisung meinst du, die aufsteigend sortieren soll?

Die Abfrage:
$sql = "SELECT txt FROM table WHERE incrementWert='$incrementWert'";
sollte genau ein Ergebnis liefern!? Sortieren ist doch gar nicht notwendig?

Re: Datensatz nach Tag auswaehlen

am 24.12.2005 10:25:41 von Werner Bauer

"Stephan Kolbius":
> Habe ich gemacht. Es hagelt Parse-Errors.

Sieht mir aber fast ganz richtig aus, nur das Update ...
>> $sql = "UPDATE id SET viewed='$today'";

die zu ändernde Tabelle heisst nicht "id" ... ersetze das und paar Zeilen
weiter oben "$table" durch deinen Tabellennamen ..

W

Re: Datensatz nach Tag auswaehlen

am 24.12.2005 20:14:59 von Stephan Kolbius

"Mustafa Korkmaz" schrieb>

> Welche Anweisung meinst du, die aufsteigend sortieren soll?

Sorry, Mustafa, es funktioniert!! Danke!! Hatte nur vergessen die
selectierte ID um 1 zu erhöhen, sonst fing er bei Null an und hat keinen
Datensatz gefunden, weil die ID bei 1 anfangen.

Vielen Dank für Deine Hilfe,

Gruß Stephan