Ankündigung

Einklappen
Keine Ankündigung bisher.

100 000 Datensätze. Nur die ersten 1000 auflisten, wie?

Einklappen

Neue Werbung 2019

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

  • 100 000 Datensätze. Nur die ersten 1000 auflisten, wie?

    Ich werde bis zu 100 000 Datensätze haben und möchte nur 1000 zufällige davon in einem Javascript-Scroller auflisten. Wie kann ich das am besten machen?

    Danke für eure Tipps!

  • #2
    mit
    LIMIT 1000

    Am ende des queries

    Kommentar


    • #3
      Er möchte aber zufällige haben... ich glaube das ist mit einer Abfrage nicht möglich.

      Kommentar


      • #4
        Wenn er ein
        Code:
        ORDER BY RAND() LIMIT 1000
        verwendet, schon.

        MySQL :: MySQL 5.1 Referenzhandbuch :: 12.4.2 Mathematische Funktionen

        Kommentar


        • #5
          Danke euch, hat geklappt.
          Da 1000 aber ziemlich viele sind, geht es lange bis die Seite geladen ist. Kann ich irgendwie die ersten 50 Datensätze herausholen und dann per Ajax nachladen? Wenn jemand hier noch helfen könnte, wäre das Klasse!

          Kommentar


          • #6
            Zitat von leonv Beitrag anzeigen
            Wenn er ein
            Code:
            ORDER BY RAND() LIMIT 1000
            verwendet, schon.

            MySQL :: MySQL 5.1 Referenzhandbuch :: 12.4.2 Mathematische Funktionen
            Ah das geht? Ich wusste zwar dass es die RAND funktion gibt, aber nicht, dass man sie bei ORDER BY benutzen kann

            Kommentar


            • #7
              Hat niemand eine Idee? Bin für jeden Tipp dankbar!

              Kommentar


              • #8
                Speichere die 1000 Werte in einem Session-Array, übergebe beim ersten Mal nur die ersten 50 und dannach die anderen Werte vom Array.

                Von JavaScript heraus könnte die Anfrage dann so aussehen:
                loadData.php?get=first
                loadData.php?get=left

                PHP kann dann über $_GET["get"] unterscheiden.

                Kommentar


                • #9
                  Dann musst du aber auch 1000 Datensätze auslesen :/

                  Wenn du aber die 1000 nicht zwischenspeicherst wirst du beim neuen Zugriff (per Zufall) vlt. die selben nochmal erwischen. Daher musst du entweder auf den Zufall verzichten oder eben wie leonv sagt dir irgendwie merken welche Datensätze schon angezeigt wurden.

                  Kommentar


                  • #10
                    Die Daten sollten eine fortlaufende lückenlose unique ID haben (Autoincrement-Spalte), z.B. mit dem Spaltennamen ìd`.

                    Dann kannst du mittels MAX(id) den größten Wert $max ermitteln und in PHP mit RAND(1,$max) 1000 Unique-Zufallszahlen ermitteln. Mit diesem Array kannst du dann direkt in die Tabelle hineingreifen. Das sollte per Session auch in 50er Bröckchen gehen.

                    Kommentar


                    • #11
                      Wie baust du denn die Seite auf? Wenn du erst alle Datensätze lädst und dann ausgibst, dann muss der User natärlich lange warten. Wenn du allerdings direkt in der Fetchschleife ausgibst, dann sieht der User die Einträge langsam ankommen, bzw in Pakteten von mehreren...

                      Kommentar


                      • #12
                        Nur als Idee, wie ich rangehen würde:

                        - Zufällige 1000 auslesen
                        - x ausgeben
                        - 1000-x in einem tmp db table speichern
                        - nächster seitenaufruf: die ersten x auslesen, danach sofort aus dem tmp table löschen

                        Vorteile :

                        => nur beim 1. scriptstart längere ladezeit

                        => Sofern du nach dem 1. auslesen nicht sortierst, brauchst du dann auch keine Entropie mehr reinbringen.

                        => Neu schreiben und löschen in der DB ist wahrscheinlich schneller als alles über die Session zu übergeben.

                        Kommentar

                        Lädt...
                        X