Ankündigung

Einklappen
Keine Ankündigung bisher.

nur x Prozent meiner Datenbankdatensätze abfragen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • nur x Prozent meiner Datenbankdatensätze abfragen

    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?

    PHP-Code:
        $modulo_divisor round(100 $prozent);

        ... 
    SELECT ... WHERE MOD(id'.$modulo_divisor.')>'; 

  • #2
    Nur mal als Idee, keine Ahnung ob das performant oder elegant ist

    Hol dir die Datensätze per ORDER BY RAND() LIMIT XY und frag dann dieses Ergebnis nochmal ab und sortiere es dann wieder wie gewünscht....irgendwie so:

    SELECT wert, datum FROM (SELECT wert, datum FROM tabelle ORDER BY RAND LIMIT 70) AS A ORDER BY datum

    Kommentar


    • #3
      Müssen es genau 90% sein, oder können es auch nur rein theoretisch 90 % sein?

      SELECT * FROM tabelle ORDER BY altesortierung WHERE RAND() < 0.9

      Notfalls die 10% durch PHP manuell rauswerfen, machts ja auch net fett, die 10% zuviel rausgeholt zu haben.

      Kommentar


      • #4
        Müssen es genau 90% sein, oder können es auch nur rein theoretisch 90 % sein?

        ==> muss nicht exakt 90 sein. Es können auch mitten drin IDs in der DB fehlen. Von daher wirds schon nie ganz auf x % gleichmäßig verteilt sein.

        SELECT * FROM tabelle ORDER BY altesortierung WHERE RAND() < 0.9
        Notfalls die 10% durch PHP manuell rauswerfen, machts ja auch net fett, die 10% zuviel rausgeholt zu haben.
        ==> Das geht? Was bedeutet diese Anweisung? Per PHP kann ich die Sachen nicht rauswerfen. Ich vergaß zu erwähnen, dass es ca. 20.000 Datensätze sind, die per LIMIT schon begrenzt sind. Kann aus Performancegründen nicht immer alle Datensätz abfragen.

        --------------------------------------------------------------------------------

        Nur mal als Idee, keine Ahnung ob das performant oder elegant ist

        Hol dir die Datensätze per ORDER BY RAND() LIMIT XY und frag dann dieses Ergebnis nochmal ab und sortiere es dann wieder wie gewünscht....irgendwie so:

        SELECT wert, datum FROM (SELECT wert, datum FROM tabelle ORDER BY RAND LIMIT 70) AS A ORDER BY datum

        ==> das Problem ist: Ich möchte die Abfrage in einem bestehenden System machen und ohne viel Leistungsaufwand die Datensätze rausschmeißn, als stünden sie nie in der Tabelle. Problematisch ist auch, dass man in den bisherigen Ausgaben blättern kann, was auch weiterhin funktionieren soll.

        Kommentar


        • #5
          Was willst du eigentlich machen??

          Kommentar

          Lädt...
          X