Mario: PHP + MySQL: Zeile zufällig bestimmen - Algorithmus

Hallo,

ich möchte über PHP zufällig genau einen Eintrag aus der Datenbank selektieren. Ich habe mir überlegt, eine Spalte mit aufsteigenden Zahlen zu definieren, mir über PHP eine Zufallszahl im Intervall auszudenken und dann die Abfrage zu setzen. Funktioniert meiner Meinung nach so lange, bis ich Datensätze lösche. Dann müßte ich jedesmal die ganze Tabelle durchgehen, um sicherzustellen, daß die Nummern fortlaufend bleiben und keine Löcher entstehen. Mal abgesehen, daß ich nicht so recht weis, wie ich einen solchen Durchlauf machen soll, gibt es vielleicht einen einfacheren Weg, einfach zufällig eine Zeile auszuwählen? (Ich bin in der Tabellenstruktu absolut ungebunden und kann noch alles verändern.) Danke im voraus!

Grüße aus Ulm,
Mario.

  1. Hallo Mario,

    ich möchte über PHP zufällig genau einen Eintrag aus der Datenbank selektieren.

    lass das mysql selbst machen: http://www.mysql.de/doc/de/Mathematical_functions.html#IDX1232

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
    1. Hallo,

      der Zufallsgenerator ist nicht das Problem. Mein Problem ist, über was ich ihn laufen lassen soll. Sobald ich Datensätze lösche, habe ich Löcher im Intervall. Wie kann ich diese verhindern?

      Gruß, Mario.

      1. Hallo Mario,

        der Zufallsgenerator ist nicht das Problem. Mein Problem ist, über was ich ihn laufen lassen soll.

        hast du den Link angeschaut? ein 'SELECT * FROM tabelle ORDER BY RAND() LIMIT 1' gibt dir genau einen Datensatz aus der Tabelle 'tabelle' aus - das wolltest du doch, oder?

        Sobald ich Datensätze lösche, habe ich Löcher im Intervall. Wie kann ich diese verhindern?

        in welchem Interval? bei den ids ist das egal: http://www.dclp-faq.de/q/q-sql-ids.html - und eine Spalte nur um die Datensätze durchzunummerieren ist Verschwendung.

        Grüße aus Nürnberg
        Tobias

        --
        Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
        1. Hallo nochmal,

          das heißt also ich brauche keinen index laufen zu lassen, oder? Sorry, das wußte ich nicht, ich dachte ich brauche ein eindeutiges Identifikationsmerkmal, um die Abfrage zu setzen. Danke für Deine weiterführenden Links. Ich denke, ich komme jetzt weiter!

          Gruß, Mario.

          1. Moin!

            das heißt also ich brauche keinen index laufen zu lassen, oder?

            Doch, das ist sehr anzuraten, damit du die Datensätze eindeutig identifizieren kannst. Nur ändert sich die ID eines Datensatzes niemals, sondern bleibt immer gleich. Dass dadurch mit der Zeit Löcher entstehen, ist normal und gewollt.

            - Sven Rautenberg

            --
            "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
            (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
  2. Hallo,

    in PHP gibt es einen zufallsgenerator, der zufällig eine Zahl in einem bestimmten Zahlenraum ausgibt.

    $db_agfrage = "... WHERE id LIKE '$zufall'";

    MFG
    Andavos

    --
    http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr