Join -> abfragen auf nicht existierende Einträge

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

  • Join -> abfragen auf nicht existierende Einträge

    Hi,

    Ich hab ein Standard-Problem, das ich einfach nicht gelöst kriege *grmpf*

    Und zwar gehts um ein simples Voting:

    PHP-Code:
    CREATE TABLE IF NOT EXISTS fragen (
      
    id_frage INT(10UNSIGNED NOT NULL auto_increment,
      
    display TINYINT(1UNSIGNED NOT NULL default 0,
      
    datum DATETIME NOT NULL,
      
    frage text NOT NULL default ''

    PRIMARY KEY  idpk(id_fragedisplay)
      
    TYPE=MyISAM;


    CREATE TABLE IF NOT EXISTS voting (
        
    id_frage INT(10UNSIGNED NOT NULL,
        
    id_user INT(10UNSIGNED NOT NULL,
        
    points TINYINT(3UNSIGNED NOT NULL,
        
        
    PRIMARY KEY  idpk(id_frageid_user)
      
    TYPE=MyISAM
    Und zwar brauche ich eine Liste mit den Fragen, die ich (id_user) noch nicht bewertet habe.

    Und ganz super wäre es, wenns mit einer Abfrage Sortieren nach 'Noch nicht bewertet' gehen würde )))

    Das Problem hatte ich schon öfters. Bisher habe ich mich mit Tricks retten können ..... bei einem Voting funktioniert mein "Standardtrick" aber leider nicht


    Danke für eure Hilfe )))

  • #2
    schmeiss zuerst das entsprechende NOT NULL raus. dann kannst später mit IS NULL prüfen. und wie sieht der bisherige query aus?

    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Code:
      SELECT f.id
      FROM fragen f
      LEFT JOIN voting v ON ( v.id_frage = f.id AND v.id_user = $user_id )
      WHERE v.id_frage IS NULL
      Code:
      SELECT id
      FROM fragen
      WHERE id NOT IN ( SELECT id_frage FROM voting WHERE id_user = $user_id )

      Kommentar


      • #4
        Original geschrieben von Kropff
        schmeiss zuerst das entsprechende NOT NULL raus. dann kannst später mit IS NULL prüfen. und wie sieht der bisherige query aus?
        Warum soll er NOT NULL rausschmeißen? Hat doch keinen Einfluss auf die Abfrage mit IS NULL.

        Kommentar


        • #5
          Original geschrieben von h3ll
          Warum soll er NOT NULL rausschmeißen? Hat doch keinen Einfluss auf die Abfrage mit IS NULL.
          doch. wie will er sonst mit IS NULL prüfen.

          peter
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar


          • #6
            Original geschrieben von Kropff
            doch. wie will er sonst mit IS NULL prüfen.
            Siehe mein Posting oben.

            Wenn ein LEFT JOIN keine Einträge liefert, haben die Spalten den Inhalt NULL.

            Ich mache sozusagen einen LEFT OUTER JOIN.
            Zuletzt geändert von h3ll; 24.04.2009, 15:12.

            Kommentar


            • #7
              wenn eine spalte als NOT NULL definiert wurde, wird immer etwas hineingeschrieben notfalls ein leerstring. oder reden wir aneinander vorbei?

              peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar


              • #8
                Original geschrieben von Kropff
                und wie sieht der bisherige query aus?
                [/B]
                Gar nicht .... Ich hab mich schon oft vergeblich damit herumgespielt, deswegen hab ichs diesesmal gar nicht mehr probiert

                Bei frühren Projekten sah das so aus, daß ich einfach sichergestellt habe, daß alle Einträge in der Datenbank vorhanden sind. Bei einem Wartungssystem für eine mehrsprachige Webseite ist das OK, weil früher oder später sowieso alle Einträge da wären

                SELECT f.id
                FROM fragen f
                LEFT JOIN voting v ON ( v.id_frage = f.id AND v.id_user = $user_id )
                WHERE v.id_frage IS NULL
                So einfach? Ich habs geahnt.....

                *indenarschbeiß*

                Danke ))))

                Kommentar


                • #9
                  Original geschrieben von Kropff
                  wenn eine spalte als NOT NULL definiert wurde, wird immer etwas hineingeschrieben notfalls ein leerstring. oder reden wir aneinander vorbei?
                  Hier gehts aber nicht ums reinschreiben, sondern um einen JOIN. Wenn du auf etwas einen LEFT JOIN machst, das es nicht gibt, haben automatisch alle fehlenden Spalten den Wert NULL, und zwar völlig unabhängig, wie die Struktur der gejointen Tabelle aussieht.

                  Kommentar


                  • #10
                    jetzt habe ich dich verstanden. ja, ist so. hast ja recht.

                    bei uns hat im innenhof ein entenpärchen nachwuchs bekommen und die machen gerade einen ausgiebigen spaziergang. das lenkt ab

                    peter
                    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                    Meine Seite

                    Kommentar


                    • #11
                      OffTopic:
                      bei uns hat im innenhof ein entenpärchen nachwuchs bekommen und die machen gerade einen ausgiebigen spaziergang. das lenkt ab
                      Der Kropff wird alt Oder ist "bei uns im innenhof" in einem deiner Videospiele?

                      Kommentar

                      Lädt...
                      X