2017-02-02 1 views
0

Ich verwende Dreamweaver CS5 und MySQL. Ich hatte eine ähnliche Diskussion über dieses auf einem früheren Post hier:SQL Query einmal täglich in sequenzieller ID-Reihenfolge

Randomly Displayed Text

Die Abfrage, die ich aus dieser Diskussion verwende ist:

select description from Weather 
where ID = 1 + MOD(
    (EXTRACT(DAY FROM CURDATE()) 
    * EXTRACT(MONTH FROM CURDATE()) 
    * EXTRACT(YEAR FROM CURDATE())), 
(select MAX(ID) from Weather)); 

ich über das Hinzufügen einer neuen Funktion auf meiner Website arbeite . Ich habe eine harte Zeit versucht, die Abfrage zu ändern, anstatt sie zufällig eine ID aus der Tabelle, die ich abfragen möchte, in sequenzieller Reihenfolge, dann nach der maximalen ID, ID 1 zurückzugreifen. Ich verwende eindeutige IDs für diese SQL-Datenbank und es wird 28 Zeilen geben.

Jede Hilfe wäre toll! Vielen Dank!

aktualisieren ****

Dies funktioniert nur, wenn ich manuell das Datum heute 2017.02.02 ändern:

SELECT description 
FROM `Moon` 
WHERE ID = 1 + MOD(DATEDIFF('2017-01-01',CURDATE()), (SELECT MAX(ID) from `Moon`))"; 

<script type="text/javascript"> 
setInterval("my_function();",100000); 

function my_function(){ 
    $('#weather').load('website.php #today'); 
} 
<div id="weather"> 
       <div id="today"> 
       <?php echo ucfirst($row_Recordset2['description']); ?> 
       </div> 
       </div> 

ich .load bin mit der Daten alle 24 Stunden aktualisiert werden . Wie kann ich das korrigieren, sodass ich das Datum nicht manuell aktualisieren muss?

+0

Sie, um zu verfolgen, was war die letzte Zeile zurückgegeben. Ansonsten gibt es keine Möglichkeit zu sagen, welche Zeile als nächstes zurückgegeben werden muss. – bc004346

+0

SQL ist nicht meine Stärke, ich habe mir langsam selbst beigebracht, wie man es benutzt. Hast du ein Beispiel dafür, wie das aussehen würde, wenn ich die Zeichenfolge verwende, die ich bereits verwende? – Cyndi

+0

Versuchen Sie, "Text" täglich oder bei jeder Abfrage zu drehen? Ich nehme an, Abfrage wird mehrmals am Tag ausgeführt. – bc004346

Antwort

1

Try this:

SELECT text 
FROM WeatherTexts 
WHERE ID = 1 + MOD(DATEDIFF('2017-01-01',CURDATE()), (SELECT MAX(ID) from WeatherTexts)); 
+0

Leider liefert dies keine Daten aus der Tabelle. $ query_Recordset2 = "SELECT Beschreibung VON' Moon' WO ID = DATEDIFF ('2017-01-01', CURDATE())% (SELECT MAX (ID) von 'Moon') + 1"; – Cyndi

+0

Wenn ich das Datum auf 2017-02-02 ändere, werden die Daten aus der Tabelle angezeigt. Aber wenn es ein anderes Datum ist, gibt es keine Daten zurück. – Cyndi

+0

Probieren Sie meinen Schnitt; irgendwie schwierig zu arbeiten, ohne MySQL-Instanz installiert zu haben – bc004346

1

Nehmen Anzahl der Tage seit einem bestimmten Datum, dann MOD auf 28

SELECT text 
FROM WeatherTexts 
WHERE ID = DATEDIFF(day,'2017-01-01',CURDATE()) % (SELECT MAX(ID) from WeatherTexts) + 1 
+0

Dies setzt tägliche Textdrehung voraus; Aus der Frage klingt es, als ob sie bei jeder Abfrage einen anderen Text haben möchte. – bc004346

+0

Ahh, dann ist ja eine gespeicherte Variable eine Voraussetzung. – Mike

+1

Es ist meine schlechte Erklärung, es tut mir leid BC. Ich denke, Mike könnte haben, was ich hier brauche. Alles ist bereits so eingestellt, dass alle 24 Stunden abgerufen werden. Das ist in Ordnung, solange eine neue Abfrage einmal pro Tag erstellt wird und die nächste ID in der sequenziellen Reihenfolge angezeigt wird. Wird es am 28. Tag auch wieder auf ID 1 starten? Der Text, den ich anzeigen möchte, ist bereits in der Datenbank enthalten, ich werde ihn nur auf der Website anzeigen. Ich möchte, dass der 24-Stunden-Timer mit der nächsten Reihe fortwährend aktualisiert wird, bis er das Ende erreicht und neu beginnt. – Cyndi