Ankündigung

Einklappen
Keine Ankündigung bisher.

Bannerrotation mit gewichtetem Zufall ohne Wiederholung

Einklappen

Neue Werbung 2019

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

  • Bannerrotation mit gewichtetem Zufall ohne Wiederholung

    Hallihallo!
    Ich bin absoluter Anfänger und stehe leider momentan ziemlich aufm Schlauch.
    Undzwar geht es um ein Skript, das den Pfad eines zufällig ausgewählten Bildes ausgeben soll. Der Pfad und die Gewichtung des jeweiligen Bildes sind in einer Datenbank gespeichert. Bisher habe ich die Bannerrotation so gelöst:

    PHP-Code:
        $max_gewicht "";
        
    $ergebnis_max_gewicht mysql_query("SELECT gewicht, MAX(gewicht) FROM bannerrotation");
        while(
    $result mysql_fetch_array($ergebnis_max_gewicht))
            {
            
    $max_gewicht $result[1];
            
    // Bestimmung des maximalen Gewichts
            
    }
        

        
    $rand rand(1$max_gewicht);

        
    $ergebnis mysql_query("SELECT gewicht, pfad FROM bannerrotaion WHERE gewicht >= $rand ORDER BY RAND () LIMIT 1");
        while(
    $result mysql_fetch_array($ergebnis))
            {
            echo 
    $result['url'];
            
    array_unshift($_SESSION['pfad'], $result['pfad']);
    // Ich hatte mir überlegt, die bisher zufällig ausgewählten Pfade in einer Session zu speichern 
            

    Nun ist es aber so, dass ich nach Möglichkeit keine Wiederholungen bei der zufälligen Auswahl haben möchte. Ich hatte mir deshalb überlegt, die zufällig ausgegebenen Pfade in einer Session zu speichern. Anschließend sollen dann bei der nächsten Abfrage nur noch die Einträge angezeigt werden, die ungleich der bisherigen sind. Die Ausgabe soll sich also sukzessiv verkleinern, bis gar nichts mehr zur Auswahl steht.

    Ich habe versucht das mit einer "WHERE NOT" Abfrage zu realisieren, also ungefähr so:
    PHP-Code:
    mysql_query("SELECT gewicht, MAX(gewicht) FROM weiterleitung WHERE pfad NOT $_SESSION['pfad'] "
    Aber das geht wohl nicht, weil $_SESSION ein array ist. Aber irgendwie bräuchte ich halt eine "WHERE NOT" Abfrage die für alle Elemente des Arrays durchgeführt wird. Das Problem ist aber auch, dass in das Array immer zusätzliche Einträge kommen, undzwar immer der zuletzt ausgegebene Pfad.


    Sorry, wenn ich mich grad ein bisschen kompliziert ausdrücke. Falls das zu unverständlich sein sollte, kann ich probieren das Problem noch mal besser zu umschreiben.


  • #2
    Schreibe die Daten doch in ein Array und lasse dann dieses durchlaufen und setze [man]array_unique[/man] ein, das entfernt dir alle doppelten Einträge im Array.
    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
    http://www.lit-web.de

    Kommentar


    • #3
      Hey litterauspirna, danke für deine Antwort.
      Vielleicht habe ich deinen Hinweis falsch verstanden, aber mir ging es eigentlich mehr darum, wie ich die Einträge, die ungleich den bisherig ausgegebenen sind, aus der Datenbank herausbekomme. Die bisher ausgegebenen Einträge sind dabei in einer Session gespeichert.

      Kommentar


      • #4
        Entweder du baust aus deinem Session-Array eine komplexe UND-Verknpüfung zusammen
        Code:
        WHERE `pfad` <> '" . $_SESSION['pfad'][0] . "' AND `pfad` <> '" . $_SESSION['pfad'][1] . "'
        oder du setzt auf NOT IN
        Code:
        WHERE `pfad` NOT IN('" . $_SESSION['pfad'][0] . "', '" . $_SESSION['pfad'][1] . "')
        http://hallophp.de

        Kommentar


        • #5
          Hey danke Asipak!
          Genau sowas hab ich gesucht! Ich hab's jetzt mal mit deiner zweiten Variante probiert. Das einzige Problem ist jetzt, dass der Session Array ja beliebig lang werden kann und ich deshalb nicht jeden einzelnen $_SESSION['pfad'][$x] eintippen kann. Wie kann ich das lösen? Bei der Datenabfrage müsste dann immer automatisch das komplette Array überprüft werden.

          Kommentar


          • #6
            Oh da habe ich etwas an deinem Beitrag falsch verstanden, dann sorry für die Fehlinformation.

            Du willst also aus der Datenbanktabelle nur Daten haben die nicht schon in dem Array drin stehen? Dann kannst du in der Abfrage, also im SQL-Statement auch auf den IN() Operator zugreifen, ich bracuhte den mal für etwas ähnliches.
            Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
            http://www.lit-web.de

            Kommentar


            • #7
              Das einzige Problem ist jetzt, dass der Session Array ja beliebig lang werden kann und ich deshalb nicht jeden einzelnen $_SESSION['pfad'][$x] eintippen kann.
              Na, schnapp dir eine Schleife.
              http://hallophp.de

              Kommentar


              • #8
                Oder einfacher, [MAN]implode[/MAN]

                Kommentar


                • #9
                  Hey danke Leute, hab's endlich hinbekommen. Schönen Tag noch!

                  Kommentar

                  Lädt...
                  X