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

SQL Zufällige Zeilen in einer großen Tabelle (mit where-Klausel)

Ich würde gerne eine konkrete Antwort geben, aber ich brauche Hilfe, um Ihren Denkprozess zu verstehen...

Sie beginnen mit dem Schreiben:

Aber du schreibst dann weiter:

Für mich ergibt die letztere Spezifikation angesichts der ersten Bemerkung wenig Sinn.

Imho, was Sie wirklich wollen, ist, dass die Benutzer die gleiche Anzahl von Möglichkeiten haben, über jedes Auto abzustimmen. Oder genauer gesagt, für jedes Auto im Vergleich zu jedem anderen Auto zu stimmen.

Wenn Sie davon ausgehen, dass die (Auto-)Variablen unabhängig sind, müssen Sie zählen, wie oft eine Wahl getroffen wurde, anstatt wie oft dafür gestimmt wurde, und Ihren Entscheidungsprozess entsprechend anpassen. Es ist ein mathematisches Problem, es ist nicht so hässlich, und es kann dann zum Besseren oder Schlechteren in SQL übersetzt werden – ich würde vermuten, dass es wahrscheinlich schlimmer sein wird.

Wenn Sie wie ich davon ausgehen, dass sie nicht unabhängig sind, müssen Sie auch Korrelationen berücksichtigen – und speichern, wie oft sie sich gegenseitig begegnet sind. Denn, nun, es gibt eine unendlich geringe Chance, dass Sie diesen Mercedes nicht lieber als diesen Tata, diesen Xinkai oder diesen AvtoVAZ bevorzugen werden. Aber wenn man die Wahl zwischen demselben Mercedes, einem BMW, einem Porsche und einem Ferrari hat, ist die Entscheidung vielleicht nicht so eindeutig.

Mit anderen Worten, Ihre Spezifikation beantwortet das Problem überhaupt nicht, wie Sie es dargestellt haben.

Ich bitte Sie derzeit, der vor zwei Stunden geposteten Antwort zuzustimmen:Wählen Sie sie wirklich zufällig aus, und Sie werden ohne zusätzlichen Code zufrieden sein ...

Als Nebenbemerkung, wenn Ihre IDs wirklich keine Lücken haben, generieren Sie vier IDs in PHP oder was auch immer und rufen Sie sie mit einem in() ab Aussage. Effizienter geht es nicht.