Hallo,
ich habe meine Datensätze mit Nummern durchnummeriert (id=1 bis ...).
Nun möchte ich z. B. nur 90% der Datensätze abfragen. Ich will aber nicht einfach ein Limit machen. Es sollten zwischendurch einfach welche fehlen. (noch genialer wäre es ja, wenn ich zufällig 10% entfernen könnte). Eine bestehende Sortierung soll aber bestehen bleiben. Kann also nicht einfach ORDER BY RAND() LIMIT ... machen
Also mache ich das so (für 90%):
SELECT * FROM table WHERE MOD(id, 10)>0
Schön und gut. Jedes 10. Element der Tabelle entfällt somit. Aber wie mache ich das ganze dynamisch. Hab es nicht wirklich hingekriegt. Die Werte stimmen zwar im Prinzip. Sie sind aber beim dynamischen zu ungenau. Vielleicht ist es ja auch ein Denkfehler meinerseits oder es liegt an der Rundung. Was mache ich falsch?
ich habe meine Datensätze mit Nummern durchnummeriert (id=1 bis ...).
Nun möchte ich z. B. nur 90% der Datensätze abfragen. Ich will aber nicht einfach ein Limit machen. Es sollten zwischendurch einfach welche fehlen. (noch genialer wäre es ja, wenn ich zufällig 10% entfernen könnte). Eine bestehende Sortierung soll aber bestehen bleiben. Kann also nicht einfach ORDER BY RAND() LIMIT ... machen
Also mache ich das so (für 90%):
SELECT * FROM table WHERE MOD(id, 10)>0
Schön und gut. Jedes 10. Element der Tabelle entfällt somit. Aber wie mache ich das ganze dynamisch. Hab es nicht wirklich hingekriegt. Die Werte stimmen zwar im Prinzip. Sie sind aber beim dynamischen zu ungenau. Vielleicht ist es ja auch ein Denkfehler meinerseits oder es liegt an der Rundung. Was mache ich falsch?
PHP-Code:
$modulo_divisor = round(100 / $prozent);
... SELECT ... WHERE MOD(id, '.$modulo_divisor.')>0 ';

Kommentar