Werte abfragen, ob diese in einer Tabelle enthalten sind

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

  • Werte abfragen, ob diese in einer Tabelle enthalten sind

    Hi Leute,
    ich bin mal wieder absolut ratlos.. Habe schon alles mögliche versucht, hinter diese zeile hier zu kommen, aber ich bekomme sie nicht vereinfacht..

    PHP-Code:
    $sql "SELECT u.id, u.frage 
    FROM rj_umfrage AS u 
    WHERE u.id NOT IN (SELECT s.umfrageid FROM rj_umfrage_stimme AS s WHERE s.ip = '
    $ip') 
    AND u.datum < NOW() AND u.datumende > NOW() ORDER BY RAND()"

    kann mir da jemand ne lösung für geben? es geht darum, dass gecheckt werden soll, ob die ip-adresse bei den abgegebenen stimmen der umfrage schon vorhanden ist.. und zwar soll der, sofern sie nicht vorhanden ist, hinterher via mysql_num_rows() "0" ausspucken, ansonsten halt "1" (für wert vorhanden)

    danke im vorraus
    Zuletzt geändert von Cady; 13.05.2008, 22:13.

  • #2
    Bitte mache doch ein paar sinvolle Umbrüche in deinen Query, und rücke ein wenig ein, dann schaue ich ihn mir an.
    Webdesign und Webentwicklung - Plunix.de

    Kommentar


    • #3
      PHP-Code:
      $sql "SELECT u.id, u.frage 
      FROM rj_umfrage AS u 
      WHERE u.id NOT IN (SELECT s.umfrageid FROM rj_umfrage_stimme AS s WHERE s.ip = '
      $ip') 
      AND u.datum < NOW() AND u.datumende > NOW() ORDER BY RAND()"

      das problem ist ja von mir beschrieben sprich, das mitm datum-vergleich funktioniert alles.. nur halt diese abfrage, ob diese ip nicht in der anderen tabelle ist, macht mir kopfweh

      Kommentar


      • #4
        Das NOT IN ist hier Falsch, wieso verwendest du schon den Aufbau eines Joins wenn es dann doch kein richtiger ist? Bau das ganze doch direkt als Join.

        // EDIT: Habe das und nach dem ersten komma entfernt, vielleicht wird es dann klarer.
        Zuletzt geändert von Lennie; 13.05.2008, 22:24.
        Webdesign und Webentwicklung - Plunix.de

        Kommentar


        • #5
          Also, das ganze soll wohl eher ein SQL-Problem darstellen.

          Hierfür wäre dann zunächst die Tabellenstruktur interessant. Und dann müsstest du deine Bedingung die erfüllt (oder eben nicht erfüllt) sein soll noch mal in Worte fassen.

          Wäre natürlich auch toll, wenn du den aktuellen ist-zustand beschreiben könntest und uns sagst, was dich daran stört.

          Kommentar


          • #6
            Original geschrieben von Lennie
            Das NOT IN ist hier Falsch, wieso verwendest du schon den Aufbau eines Joins wenn es dann doch kein richtiger ist? Bau das ganze doch direkt als Join.

            // EDIT: Habe das und nach dem ersten komma entfernt, vielleicht wird es dann klarer.
            hmm.. das ist leider geschehen, bevor ich die seite übernommen habe.. ich schau mir des gerad an..

            so in etwa:

            PHP-Code:
            $sql "SELECT u.id, u.frage, s.umfrageid, s.ip 
            FROM rj_umfrage AS u 
            JOIN rj_umfrage_stimme AS s 
            ON u.id != s.umfrageid
            AND s.ip = '
            $ip'
            AND u.datum < NOW() AND u.datumende > NOW() ORDER BY RAND()"

            Kommentar


            • #7
              Original geschrieben von TobiaZ
              Also, das ganze soll wohl eher ein SQL-Problem darstellen.

              Hierfür wäre dann zunächst die Tabellenstruktur interessant. Und dann müsstest du deine Bedingung die erfüllt (oder eben nicht erfüllt) sein soll noch mal in Worte fassen.

              Wäre natürlich auch toll, wenn du den aktuellen ist-zustand beschreiben könntest und uns sagst, was dich daran stört.
              Der aktuelle IST-Zustand ist der, dass durch diese verbugte Abfrage die Gesamte Website dermaßen lahmt, so dass teilweise die ladezeiten auf 13 sekunden fallen.. ohne diese abfrage (auskommentiert) unter 0,6 sekunden..

              öhm.. tabellenstrukturen:

              PHP-Code:
              -- 
              -- 
              Tabellenstruktur für Tabelle `rj_umfrage`
              -- 

              CREATE TABLE `rj_umfrage` (
                `
              idint(11NOT NULL auto_increment,
                `
              datumtimestamp NOT NULL default '0000-00-00 00:00:00',
                `
              datumendetimestamp NOT NULL default '0000-00-00 00:00:00',
                `
              fragevarchar(255NOT NULL default '',
                
              PRIMARY KEY  (`id`)
              ENGINE=MyISAM AUTO_INCREMENT=DEFAULT CHARSET=latin1 AUTO_INCREMENT=;

              -- --------------------------------------------------------

              -- 
              -- 
              Tabellenstruktur für Tabelle `rj_umfrage_antworten`
              -- 

              CREATE TABLE `rj_umfrage_antworten` (
                `
              idint(11NOT NULL auto_increment,
                `
              umfrageidint(11NOT NULL default '0',
                `
              antwortvarchar(255NOT NULL default '',
                
              PRIMARY KEY  (`id`)
              ENGINE=MyISAM AUTO_INCREMENT=26 DEFAULT CHARSET=latin1 AUTO_INCREMENT=26 ;

              -- --------------------------------------------------------

              -- 
              -- 
              Tabellenstruktur für Tabelle `rj_umfrage_stimme`
              -- 

              CREATE TABLE `rj_umfrage_stimme` (
                `
              idint(11NOT NULL auto_increment,
                `
              umfrageidint(11NOT NULL default '0',
                `
              antwortint(11NOT NULL default '0',
                `
              ipvarchar(15NOT NULL default '',
                `
              hostvarchar(255NOT NULL default '',
                `
              datumint(11NOT NULL default '0',
                
              PRIMARY KEY  (`id`)
              ENGINE=MyISAM AUTO_INCREMENT=276 DEFAULT CHARSET=latin1 AUTO_INCREMENT=276 

              Kommentar


              • #8
                Naja, da du zwar mal schnell die Dumps hier reingeknallt hast, aber die Bedingung nicht nochmal ausformuliert hast, bleibt mir nur ein Hinweis auf unseren JOIN-Thread in diesem Forum. Sorry.

                Kommentar


                • #9
                  Re: Werte abfragen, ob diese in einer Tabelle enthalten sind

                  Original geschrieben von Cady

                  kann mir da jemand ne lösung für geben? es geht darum, dass gecheckt werden soll, ob die ip-adresse bei den abgegebenen stimmen der umfrage schon vorhanden ist.. und zwar soll der, sofern sie nicht vorhanden ist, hinterher via mysql_num_rows() "0" ausspucken, ansonsten halt "1" (für wert vorhanden)
                  Also so wie ich das verstehe benötigst du doch die id und die ?Frage? eh nicht.... dann solltest du das auch nicht selecten.

                  Zum Join kann ich dir auch nur empfehlen, hier mal den JOIN-Thread zu lesen und dir die Syntax eines Joins nochmal anzuschauen....

                  Und warum zum Teufel machst du "ORDER BY RAND()"?? Das ist ein Performancekiller hoch 99
                  signed oder unsigned... das ist hier die Frage

                  Kommentar


                  • #10
                    mhh so wie ich ihn verstanden habe, funktioniert sein query, er ist nur sehr lahm. dann sollte er eben rand() rausnehmen. Verstehe in dem Zusammenhang mit mysql_num_rows das ganze sowieso nicht.
                    Webdesign und Webentwicklung - Plunix.de

                    Kommentar


                    • #11
                      Doch klar, er bekommt ja entweder 0 oder 1 Row zurück... und diese eine Row muss doch vernünftig sortiert werden
                      signed oder unsigned... das ist hier die Frage

                      Kommentar


                      • #12
                        Original geschrieben von case
                        Doch klar, er bekommt ja entweder 0 oder 1 Row zurück... und diese eine Row muss doch vernünftig sortiert werden
                        OffTopic:
                        Stimmt! Jetzt wo du es sagst.

                        Kommentar

                        Lädt...
                        X