Zufälligen Datensatz nach relativer Häufigkeit

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

  • Zufälligen Datensatz nach relativer Häufigkeit

    Moin Leute,

    also ich hätte da malwieder ein kleines Problemchen, dessen ( gute ) Lösung ich nicht ergoogeln konnte.

    Also, ich habe eine Tabelle mit Datensätzen. Jeder dieser Datensätze enthält ein Integer-Feld mit einer Zahl drin. Diese Zahlen können mehrfach vorkommen.

    Was ich nun möchte ist im Prinzip eine der Nummern auszuwürfeln, wobei deren relative Häufigkeit beachtet werden soll. Steht eine Zahl also in 2 Feldern, so soll die Wahrscheinlichkeit sie zu treffen doppelt so hoch sein wie für eine Zahl, die nur in einem Feld existiert.

    Da die ja alle in einer Tabelle sind hat man das ja aber schon mit drin, wenn man einfach zufällig einen auswürfelt. Ich hatte dazu folgendes gefunden:


    Code:
    SELECT foo FROM bar WHERE blablabla = blabalba ORDER BY RAND()
    Allerdings stand überall dabei, dass das bei größeren Datenmengen ih-Pfui-ih-Bah wäre, weil für jeden Datensatz ein Zufallswert erzeugt, und die dann danach sortiert würden. Da es bei mir mehrere tausend Datensätze sind, und die Funktion auf JEDER Unterseite aufgerufen wird scheint mir das also keine gute Lösung zu sein.

    Kennt da jemand noch ein besseren Weg ?

    Danke schonmal.

    Gruß,
    Aza
    Mein aktuelles Projekt: Hausaufgaben Datenbank für kostenlose Hausaufgaben

  • #2
    Re: Zufälligen Datensatz nach relativer Häufigkeit

    http://dev.mysql.com/doc/refman/5.1/...ect.html#c2161
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Was ich nun möchte ist im Prinzip eine der Nummern auszuwürfeln, wobei deren relative Häufigkeit beachtet werden soll. Steht eine Zahl also in 2 Feldern, so soll die Wahrscheinlichkeit sie zu treffen doppelt so hoch sein wie für eine Zahl, die nur in einem Feld existiert.
      Ergibt sich das nicht aus dem Umstand, dass genannte Zahl eben doppelt so oft in der Datenbank vorhanden ist wie die Andere?
      Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

      Kommentar


      • #4
        Ja, ergibt sich daraus, ich wollte nur zwecks Klarheit noch ein Beispiel bringen, weil ich selbst in solchen Foren wie diesem oft nicht verstehe, was die Leute eigentlich wissen wollen.

        Ein Dank an wahsaga, klappt astrein. Habs ein wenig anders gemacht zwar, aber vom Prinzip das Selbe:

        PHP-Code:
        # Einträge mit userId zählen
            
        $stmt $db->query('SELECT
                                  COUNT(*) AS count
                                FROM 
                                  entries
                                WHERE
                                    entryIsValid = 1
                                  AND
                                    entryUserId != 0'
            
        );
            
        $count $stmt->fetchAll();
            
        $count $count[0]['count'];
            
            
        # einen zufälligen auswürfeln
            
        $rand rand(0$count);
            
            
        # User-ID des zufällig gewählten holen
            
        $stmt $db->query('SELECT
                                  entryLayerId
                                FROM
                                  entries
                                WHERE
                                    entryIsValid = 1
                                  AND
                                    entryUserId != 0
                                LIMIT ' 
        $rand .', 1'                   
            
        );
            
        $userId $stmt->fetchAll(); 

        EDIT:
        PHP-Code:
        # einen zufälligen auswürfeln     
        $rand rand(0$count 1); 
        So muss es heißen, sonst würfelt er natürlich manchmal die 14, wobei der zähler nur bis 3 geht, weils ja bei 0 anfängt. Whoooops.
        Zuletzt geändert von nohfreak; 04.03.2009, 21:21.
        Mein aktuelles Projekt: Hausaufgaben Datenbank für kostenlose Hausaufgaben

        Kommentar

        Lädt...
        X