Auswahl eines zufälligen Datensatzes wenn dieser nicht in anderer vermerkt ist

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

  • Auswahl eines zufälligen Datensatzes wenn dieser nicht in anderer vermerkt ist

    Hi,

    ich möchte gerne einen zufälligen Datensatz per rand() ausgeben, wenn dieser nicht in einer anderen SQL_Tabelle (IP-Sperre) vermerkt ist. Die Abfrage sieht wie folgt aus:
    $sql = "SELECT * FROM user ORDER BY rand() LIMIT 1;";
    Ich habe gerade leider nicht im geringsten eine Ahnung wie ich das ohne grössere Umwege hinbekommen kann.

    Bitte helft mir

    MfG Croti

  • #2
    PHP-Code:
    $sql "SELECT * FROM user LEFT JOIN ip_sperre ON ip_sperre.ip=user.ip AND ip_tabelle IS NULL ORDER BY rand() LIMIT 1;"
    ip_sperre ist die tabelle wo du die ips speicherst.
    Dann werden die ips dieser Tabelle , den ips der user zugeordnet.
    Das "is Null" checkt, genau die user wo keine zuordnung möglich ist.

    fertig.

    gruss

    rth
    H I L F E
    GD FreeType Antialising
    Gesuch PHP Entwicklungsumgebung
    ------------------------------------------
    Der Cmabrigde rael tset, sruf whoin du wlilst

    Kommentar


    • #3
      Danke erst mal für die Antwort, was da im Text steht versteh ich leider nut zum Teil, z.b. ist ip_tabele der Tabellenname wo die IPS abgespeichert werden?

      Ich habe das Problem dass ich in der IP-Sperre eine Bildid und eine die ip vom User abspeichen muss. Wenn dann eine Bildid nicht zusammen mit der Ip vom User vorkommt soll ein rand() ausgegeben weden. Ich habs mal so versucht ging aber net:

      $sql = "SELECT * FROM user,ipsperre WHERE ipsperre.Sperr_IP = '$ip' AND user.U_ID != ipsperre.Sperr_ID ORDER BY rand() LIMIT 1;";

      Kommentar


      • #4
        ...z.b. ist ip_tabele der Tabellenname wo ...
        mein fehler hätte auch ip_sperre heissen müssen.




        Wenn dann eine Bildid nicht zusammen mit der Ip vom User
        vorkommt soll ein rand() ausgegeben weden. Ich habs mal so versucht
        ging aber net:
        also

        PHP-Code:
        $sql=SELECT FROM user LEFT JOIN ipsperre ON 
        user
        .U_ID=ipsperre.Sperr_ID AND ipsperre.Sperr_ID is Null WHERE 
        ipsperre
        .Sperr_IP '$ip' ORDER BY rand() LIMIT 1;"; 
        sollte das gewünschte liefern.

        gruss

        rth
        H I L F E
        GD FreeType Antialising
        Gesuch PHP Entwicklungsumgebung
        ------------------------------------------
        Der Cmabrigde rael tset, sruf whoin du wlilst

        Kommentar


        • #5
          sollte das gewünschte liefern.
          Leider nicht, vorhin wurde alles immerwieder ausgegeben, nun kommt gar kein bild mehr (ausser jenes welches kommt wenn keine bilder mehr zur verfügung stehen

          Gibts da irgend ein gutes Tutorial?
          Kann mir ja net alles schreben lassen....

          Kommentar


          • #6
            Kann mir ja net alles schreben lassen....
            sehr lobenswert


            Leider nicht...
            verdammt

            versteh ich aber nicht kannst du vielleicht mal, die struktur der beiden tabellen posten und auch ein paar beispiel datensätze ?
            Jetzt hat mich der ehrgeiz gepackt, ich kann das so nicht stehen lassen

            gruss

            rth
            H I L F E
            GD FreeType Antialising
            Gesuch PHP Entwicklungsumgebung
            ------------------------------------------
            Der Cmabrigde rael tset, sruf whoin du wlilst

            Kommentar


            • #7
              LOL mich auch, ich hab grad den Post vom Wahsaga gesehen der 2 links zu joins gepostet hat.

              das kann ich tun, mit den tabellen, es geht aber vielleicht auch so:

              Ich weiss net, vielleicht hast du mich auch falsch verstanden. Ich möchte die IP eines Besuchers speichern, der auf ein Bild gevotet hat, das ein User hochgeladen hat. Es wird beim Vote die ip des Besuchers gepeichert und auch die Memberid (natürlich noch ein timestamp). Jedes Bild hat einen Verweis zur Memberid. Somit werden die bilder aufgerufen. Die Memberaccounts die keinen Eintrag mit der BesucherIP haben sollen gezeigt werden.
              Wenn das net hilft, denn Post ich mal die Tabellen und bissl Code.

              Kommentar


              • #8
                hm poste doch mal bitte, je mehr ich drüber nachdenke desto mehr versteh ich nicht warum meine vorgeschlagene query nicht klappt...


                rth
                H I L F E
                GD FreeType Antialising
                Gesuch PHP Entwicklungsumgebung
                ------------------------------------------
                Der Cmabrigde rael tset, sruf whoin du wlilst

                Kommentar


                • #9
                  Also hier mal die Tabellen
                  # Tabellenstruktur für Tabelle `bilder`
                  #

                  CREATE TABLE bilder (
                  Bild_ID int(11) NOT NULL auto_increment,
                  Bild_Name varchar(50) NOT NULL default '',
                  Bild_UID int(11) NOT NULL default '0',
                  Bild_Zeit varchar(20) NOT NULL default '',
                  Bild_Breite smallint(6) NOT NULL default '0',
                  Bild_Hoehe smallint(6) NOT NULL default '0',
                  PRIMARY KEY (Bild_ID)
                  ) TYPE=MyISAM;
                  # --------------------------------------------------------

                  #
                  # Tabellenstruktur für Tabelle `ipsperre`
                  #

                  CREATE TABLE ipsperre (
                  Sperr_IP varchar(20) NOT NULL default '',
                  Sperr_ID int(11) NOT NULL default '0',
                  Sperr_Zeit varchar(30) default NULL
                  ) TYPE=MyISAM;
                  # --------------------------------------------------------

                  #
                  # Tabellenstruktur für Tabelle `user`
                  #

                  CREATE TABLE user (
                  U_ID int(11) NOT NULL auto_increment,
                  U_Name varchar(150) NOT NULL default '',
                  U_Email varchar(200) NOT NULL default '',
                  U_Pass varchar(20) NOT NULL default '',
                  PRIMARY KEY (U_ID)
                  ) TYPE=MyISAM;

                  Hier mal der Abfragecode vom Bild:
                  $sql= "SELECT * FROM user LEFT JOIN ipsperre ON user.U_ID=ipsperre.Sperr_ID AND ipsperre.Sperr_ID is Null WHERE ipsperre.Sperr_IP = '$ip' ORDER BY rand() LIMIT 1;";
                  $res = mysql_query($sql) OR die(mysql_error());
                  $userDaten = mysql_fetch_array($res);
                  echo "bb". $userDaten[U_ID]."<br>";

                  $sqlBild = "SELECT * FROM bilder WHERE Bild_UID = '$userDaten[U_ID]';";
                  $resBild = mysql_query($sqlBild) OR die(mysql_error());
                  $bild = mysql_fetch_row($resBild);
                  //echo "<img src='bilder/$bild[1]'><br>";
                  $bild = $bild[1];
                  Ich werd auf jeden Fall auch mal weitergucken. Ich wills ja auch lernen

                  Kommentar


                  • #10
                    Also ich weiss net, alles was ich find sagt mir dass dein code funzen müsst, hmmm

                    Kommentar


                    • #11
                      Hm ich checks immoment leider auch nicht, hast du vieleicht noch ein paar testdaten ?
                      H I L F E
                      GD FreeType Antialising
                      Gesuch PHP Entwicklungsumgebung
                      ------------------------------------------
                      Der Cmabrigde rael tset, sruf whoin du wlilst

                      Kommentar


                      • #12
                        hmm, hätt gleich mit inserts machen können, wollt ich eigentlich auch oje...

                        # Tabellenstruktur für Tabelle `bilder`
                        #

                        CREATE TABLE bilder (
                        Bild_ID int(11) NOT NULL auto_increment,
                        Bild_Name varchar(50) NOT NULL default '',
                        Bild_UID int(11) NOT NULL default '0',
                        Bild_Zeit varchar(20) NOT NULL default '',
                        Bild_Breite smallint(6) NOT NULL default '0',
                        Bild_Hoehe smallint(6) NOT NULL default '0',
                        Bild_Fav smallint(6) NOT NULL default '0',
                        PRIMARY KEY (Bild_ID)
                        ) TYPE=MyISAM;

                        #
                        # Daten für Tabelle `bilder`
                        #

                        INSERT INTO bilder VALUES (34, '1-1.gif', 1, '1057954219', 460, 59, 0);
                        INSERT INTO bilder VALUES (33, '1-0.gif', 1, '1057954208', 460, 59, 0);
                        INSERT INTO bilder VALUES (20, '2-0.gif', 2, '1057949671', 293, 293, 0);
                        INSERT INTO bilder VALUES (21, '3-0.gif', 3, '1057949881', 150, 150, 0);
                        INSERT INTO bilder VALUES (22, '3-1.jpg', 3, '1057950177', 460, 60, 0);
                        INSERT INTO bilder VALUES (30, '3-2.gif', 3, '1057952610', 460, 60, 0);
                        INSERT INTO bilder VALUES (35, '1-2.gif', 1, '1057954228', 460, 59, 0);
                        # --------------------------------------------------------

                        #
                        # Tabellenstruktur für Tabelle `ipsperre`
                        #

                        CREATE TABLE ipsperre (
                        Sperr_IP varchar(20) NOT NULL default '',
                        Sperr_ID int(11) NOT NULL default '0',
                        Sperr_Zeit varchar(30) default NULL
                        ) TYPE=MyISAM;

                        #
                        # Daten für Tabelle `ipsperre`
                        #

                        INSERT INTO ipsperre VALUES ('127.0.0.1', 0, '()');
                        INSERT INTO ipsperre VALUES ('127.0.0.1', 1, '1058006164');
                        INSERT INTO ipsperre VALUES ('127.0.0.1', 1, '1058006170');
                        INSERT INTO ipsperre VALUES ('127.0.0.1', 1, '1058006192');
                        INSERT INTO ipsperre VALUES ('127.0.0.1', 1, '1058006193');
                        INSERT INTO ipsperre VALUES ('127.0.0.1', 1, '1058006312');
                        INSERT INTO ipsperre VALUES ('127.0.0.1', 1, '1058006315');
                        INSERT INTO ipsperre VALUES ('127.0.0.1', 1, '1058006345');
                        INSERT INTO ipsperre VALUES ('127.0.0.1', 1, '1058006369');
                        INSERT INTO ipsperre VALUES ('127.0.0.1', 3, '1058006373');
                        INSERT INTO ipsperre VALUES ('127.0.0.1', 3, '1058006414');
                        # --------------------------------------------------------

                        #
                        # Tabellenstruktur für Tabelle `user`
                        #

                        CREATE TABLE user (
                        U_ID int(11) NOT NULL auto_increment,
                        U_Name varchar(150) NOT NULL default '',
                        U_Email varchar(200) NOT NULL default '',
                        U_Pass varchar(20) NOT NULL default '',
                        U_Geschl char(1) NOT NULL default '',
                        PRIMARY KEY (U_ID)
                        ) TYPE=MyISAM;

                        #
                        # Daten für Tabelle `user`
                        #

                        INSERT INTO user VALUES (1, 'ich', 'ich@auch', 'gq85lm92', 'm');
                        INSERT INTO user VALUES (2, 'Klausi', 'we@we', 'kz96gr24', 'm');
                        INSERT INTO user VALUES (3, 'petra', 'we@we', 'dl21sc98', 'w');
                        Bin kurz davor dasalles doch irgendwie anders anzugehn

                        Kommentar


                        • #13
                          nach probieren und probieren komme ich zu lösung

                          PHP-Code:
                          SELECT FROM user LEFT JOIN ipsperre ON ipsperre.Sperr_ID=user.U_ID AND ipsperre.Sperr_IP='127.0.0.1' WHERE ipsperre.Sperr_ID is Null 
                          was ein akt, aber jetzt sollte es endlich klappen.

                          ich hoffe

                          rth
                          H I L F E
                          GD FreeType Antialising
                          Gesuch PHP Entwicklungsumgebung
                          ------------------------------------------
                          Der Cmabrigde rael tset, sruf whoin du wlilst

                          Kommentar


                          • #14
                            hmm....

                            Du bist geil!
                            Es funzt, hurra!! Ich weiss net, ich hab auch die ganze zeit versucht und versucht, ich hätte gedacht dassdeas da auch dabeigewesen sein müsste .... bei so vielen variationen. LOL
                            Auf jeden fall DAAAnnnkeeeeee!!
                            ich will ja nu aber auch nicht dass Du verlegen wirst
                            Auf jeden Fall es funzt, und ndoch nochmal dnke dass Du mir nen guten teil eines samstages gewidmed hast :COOL:

                            Kommentar


                            • #15
                              dann hat es sich ja gelohnt
                              H I L F E
                              GD FreeType Antialising
                              Gesuch PHP Entwicklungsumgebung
                              ------------------------------------------
                              Der Cmabrigde rael tset, sruf whoin du wlilst

                              Kommentar

                              Lädt...
                              X