2016-11-24 1 views
-2

I X wollen Datensätze aus der Datenbank (in PHP-Skript) wählen, schlafen dann 60 Sekunden nach der nächsten 60 Ergebnisse weiter ...Mysql Schlaf wählen dann zurück

SO:

SELECT * FROM TABLE WHERE A = 'B' LIMIT 60 
SELECT SLEEP(60); 
.... 
SELECT * FROM TABLE WHERE A = 'B' LIMIT X **where X is the next 60 results, then** 
SELECT SLEEP(60); 

UND usw. ..

Wie kann ich dies erreichen?

+1

Warum möchten Sie für 60 Sekunden schlafen? Sie können nicht in mysql schlafen, aber Sie können in PHP/Java/C#/Perl usw. –

+0

Ich möchte dies in einem PHP-Skript – wpdaniel

+1

Siehe unten, aber Sie haben immer noch nicht beantwortet, warum Sie 60 Sekunden verzögern mussten. –

Antwort

1

In PHP:

<?php 
// obtain the database connection, there's a heap of examples on the net, assuming you're using a library like mysqlite 
$offset = 0; 
while (true) { 
    if ($offset == 0) { 
     $res = $db->query('SELECT * FROM TABLE WHERE A = 'B' LIMIT 60'); 
    } else { 
     $res = $db->query('SELECT * FROM TABLE WHERE A = 'B' LIMIT ' . $offset . ',60'); 
    } 
    $rows = $db->fetch_assoc($res); 
    sleep(60); 
    if ($offset >= $some_arbitrary_number) { 
     break; 
    } 
    $offset += 60; 
} 

Was Sie tun, um 60 das Limit Feld allmählich erhöht wird, bis eine Grenze erreicht. Der einfachste Weg, dies zu tun, ist in einer Kontrolle While-Schleife mit true für die Bedingung und break, wenn Sie Ihre ungültige Bedingung erreichen.

+0

Extrem gefährliche Antwort, vorausgesetzt, dass eine SQL-Abfrage jedes Mal dasselbe Ergebnis in der gleichen Reihenfolge zurückgibt, ohne "ORDER BY". –

+0

Es ist ziemlich einfach pseudocode Ich würde hoffen, dass die Person, die die Frage stellt, zumindest etwas recherchieren würde. –

3

Dies ist zu lang für einen Kommentar.

Es gibt keine "die nächsten 60 Datensätze". SQL-Tabellen repräsentieren ungeordnete Sets. Ohne eine order by kann eine SQL-Anweisung eine Ergebnismenge in beliebiger Reihenfolge zurückgeben - und sogar in verschiedenen Aufträgen bei unterschiedlichen Ausführungen.

Daher benötigen Sie zuerst etwas, um die Bestellung zu garantieren. . . Das heißt, ein order by mit Schlüsseln, die jede Zeile eindeutig identifizieren.

Sie können dann offset/limit verwenden, um zu erreichen, was Sie wollen. Oder Sie können den Code in eine gespeicherte Prozedur einfügen und eine while Schleife verwenden. Oder Sie könnten dies auf der Anwendungsseite tun.

+0

Das ist eine falsche Behauptung. Sie sind geordnete Mengen, in denen ein Primärschlüssel-Autoinkrementfeld vorhanden ist. Ohne sie sind die Tabellen in der linken Spalte ganz rechts angeordnet. –

+0

Ich möchte dies in einem PHP-Skript – wpdaniel

+0

@JustinMitchell. . . Können Sie die Dokumentationsreferenz angeben, die 'select' * ohne * eine' order by' garantiert, dass Ergebnisse in einer bestimmten Reihenfolge zurückgegeben werden. –