Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So wählen Sie Datensätze einzeln aus, ohne sie zu wiederholen

Da SELECT eine atomare Operation ist, glaube ich nicht, dass es eine einfache Lösung gibt. Ich sehe auch zwei verschiedene Probleme, die gelöst werden müssen:

Auswählen einer einzelnen Zeile, ohne eine gezeigte zu wiederholen. Grundsätzlich müssen Sie die zuletzt angezeigte Zeile irgendwo speichern. Wenn Sie eine Anwendung haben, die den aktuellen Status speichert, ist es möglicherweise eine Option, ihn als externe Variable zu speichern. Die skizzierte Lösung erfolgt in MySQL 5.0+:

Bereiten Sie zunächst eine Anweisung vor, die später ausgeführt wird, und legen Sie eine Anfangsposition für die Abfrage fest:

PREPARE STMT FROM 'SELECT id, name FROM customer LIMIT ?, 1';
SET @pos = 0;

Möglicherweise möchten Sie eine Standardreihenfolge hinzufügen, um ein zuverlässiges Ergebnis zu erhalten. Jedes Mal, wenn Sie eine einzelne Zeile erhalten möchten, führen Sie die Anweisung mit

aus
EXECUTE STMT USING @pos; 
SELECT count(*) FROM customer INTO @max; 
SET @pos=(@pos+1)%@max;

Die andere Sache ist, dass Sie eine zufällige Position lesen möchten. Die einzige Lösung, die ich im Moment sehe, besteht darin, eine temporäre Tabelle zu erstellen, die entweder den Inhalt von zufällig bestellten Kunden enthält, oder dass Sie eine temporäre Tabelle erstellen, die alle Zahlen von 0[email protected] und lesen Sie die aktuelle Position in der Haupttabelle aus der temporären Tabelle. Wenn Sie eine Anwendung außerhalb von MySQL haben, gibt es möglicherweise elegantere Möglichkeiten, dies zu lösen.