beantwortete Umfragen nicht anzeigen

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

  • beantwortete Umfragen nicht anzeigen

    Hallo!

    Ich habe 5 Tabellen für ein Poll-System

    user
    id, user

    Category
    id, category

    Question
    id, category_id, question

    Answer
    id, answer

    Vote
    id, user_id, question_id, answer_id


    Wenn nun ein User abgestimmt hat, will ich diese Umfragen nicht mehr für ihn anzeigen lassen.

    Also: Zeige mir alle Fragen, für die es keine Antwort in Vote von User gibt

    Mein Ansatz:
    PHP-Code:
    SELECT question.idquestion.questioncategory.id c_idcategory.category
    FROM question
    category
    WHERE question
    .category_id category.id
    AND category.id =1
    AND NOT
    EXISTS 

      
    SELECT *
      
    FROM abi_user
      WHERE NOT
      EXISTS 
    (
        
    SELECT *
        
    FROM vote
        WHERE vote
    .user_id user.id
      
    )

    leider tut dieser Ansatz nicht das, was er soll!

    d.h. gibt mir nichts zurück!
    Zuletzt geändert von zerni; 29.01.2007, 17:32.
    Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
    - ...und solche Behauptungen in "falsches Resourcenmanagement"

  • #2
    WTF? Das geht auch einfacher...

    Aus dem Thead "Joins das leidige Thema":
    alle zahlen auslesen, zu denen das quadrat nicht vorhanden ist

    Code:
    vSELECT
        	t1.zahl
        FROM
        	tabelle1 t1
        	LEFT JOIN tabelle2 t2 USING(tab1_id)
        WHERE
        	t2.tab1_id IS NULL

    Kommentar


    • #3
      also so?:
      Code:
                            SELECT question.id, question.question,category.id c_id, category.category
                            FROM
                            	question, category
                            LEFT JOIN vote USING(question.id)
                            WHERE
                            	question.category_id = category.id AND 
                              category.id = 1 AND 
                              vote.question_id IS NULL;
      bei mir kommt immer:
      Code:
      #1064 - You have an error in your SQL syntax; 
      check the manual that corresponds to your MySQL server version for the right syntax to use near '.id)
                            WHERE
                                questi
      EDIT:
      ok der fehler kam, weil ich im USING noch den tabellennamen question. reingeschrieben habe!
      das kann ich zwar umgehen wenn ich nur id reinschreibe und erst category und dann question schreibe, aber leider fehlt noch die zuordnung zu einem bestimmten nutzer!
      ich komme irgendwie auch nicht drauf

      Zuletzt geändert von zerni; 29.01.2007, 23:54.
      Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
      - ...und solche Behauptungen in "falsches Resourcenmanagement"

      Kommentar


      • #4
        USING erwartet natürlich nur den spaltennamen. das ganze auf die spalte einer tabelle/relation zu beschränken ist absolut unsinnig. du willst doch zwei relationen vreknüpfen.

        alle einschränkungen machst du im where, denn dazu ist es da.

        Kommentar


        • #5
          ja nur mein Problem ist, dass ich nicht drauf komme wie ich es beschränken soll!

          Code:
          SELECT
            question.id, question.question,category.id c_id, category.category
          FROM
            category, users, question
          LEFT JOIN vote USING(id)
          WHERE
            question.category_id = category.id AND 
            category.id = 1 AND 
            vote.question_id IS NULL AND
            users.id = 66;
          Mir ist klar, dass die Zuordnung von Userid & Question/vote hier nicht besteht, aber mir ist momentan nicht klar wie ich diese herstellen könnte.

          Weil: Ich suche mir ja eben gerade die Questions, wo nicht die user_id vorhanden ist!

          sry, wenn ich nerve, aber ich kriegs nicht hin :/
          Zuletzt geändert von zerni; 30.01.2007, 14:59.
          Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
          - ...und solche Behauptungen in "falsches Resourcenmanagement"

          Kommentar


          • #6
            *nur ungern hochdrück*
            Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
            - ...und solche Behauptungen in "falsches Resourcenmanagement"

            Kommentar


            • #7
              Poste mal einen Test-Dump, plus gewünschtes Resultat
              (bitte als Anhang)

              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
              Wie man Fragen richtig stellt

              Kommentar


              • #8
                Die Datei enthält die 3 wichtigstens tabellen: user, vote, question

                Code:
                SELECT
                  question.id, question.question, user.id
                FROM
                  category, user, question
                LEFT JOIN vote USING(id)
                WHERE
                  vote.question_id IS NULL AND
                  user.id = 1;
                Testweise hat 1 User 2 Antworten gemacht und der andere User keine Antworten

                Gewünschtes Ergebnis für User, der schon abgestimmt hat:
                Anzeige von den beiden Polls 3 & 4

                Gewünschtes Ergebnis für User, der nicht NICHT abgestimmt hat:
                Anzeige von Poll 1-4
                Angehängte Dateien
                Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
                - ...und solche Behauptungen in "falsches Resourcenmanagement"

                Kommentar


                • #9
                  SELECT question.id, vote.id, user.id
                  FROM question
                  LEFT JOIN vote ON question.id = vote.question_id
                  LEFT JOIN user ON vote.user_id = user.id AND vote.user_id = 1
                  WHERE user.id IS NULL

                  [edit]
                  Es wäre übrigens schön beim nächsten Mal einen funktionierenden Dump zu kriegen...

                  [edit2]
                  Using war übrigens vollkommen falsch, weil die zu verknüpfenden Spalten unterschiedliche Namen haben! Deshalb jetzt on

                  [edit3]
                  wenn ich dir noch einen Tipp geben darf, ein Index auf die Tabelle Vote und da auf die Spalte question_id
                  Zuletzt geändert von ghostgambler; 31.01.2007, 21:13.

                  Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                  bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                  Wie man Fragen richtig stellt

                  Kommentar


                  • #10
                    JAaaa!!!!JAAAAAAAAAAA!!!JAAAAAAAAAAAAAAAAAAAA!!!

                    vielen Dank, ich versuch das mal richtig nachzu vollziehen und dann werde ich ein paar takte im Joins das leidige Thema - Thread dazu verfassen

                    hoffe damit kann ich euch wenigstens etwas helfen

                    Vielen Dank Ghostgambler und sry wegen der kaputten dump, bei mir lief er komischer weise? was war denn kaputt?

                    gruß zerni
                    Zuletzt geändert von zerni; 01.02.2007, 11:48.
                    Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
                    - ...und solche Behauptungen in "falsches Resourcenmanagement"

                    Kommentar


                    • #11
                      Original geschrieben von zerni
                      was war denn kaputt?
                      bei user zwei Indizes auf nicht vorhandene Spalten, und bei vote ein default-Wert für eine Text-Spalte, was mysql5 nicht schluckt

                      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                      Wie man Fragen richtig stellt

                      Kommentar


                      • #12
                        Übrigens (das fiel mir heute morgen unter der Dusche mal so auf ) wozu überhaupt einen left join auf user? Brauchst du überhaupt Daten daraus?
                        Ansonsten kann man sich den klemmen:
                        SELECT question.id, vote.id
                        FROM question
                        LEFT JOIN vote ON question.id = vote.question_id AND vote.user_id = 1
                        WHERE vote.user_id IS NULL

                        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                        Wie man Fragen richtig stellt

                        Kommentar


                        • #13
                          Original geschrieben von zerni

                          Vielen Dank wahasaga

                          Kommentar


                          • #14
                            Fettnäpfchen ich komme! ;D
                            Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
                            - ...und solche Behauptungen in "falsches Resourcenmanagement"

                            Kommentar


                            • #15
                              Original geschrieben von ghostgambler
                              Übrigens (das fiel mir heute morgen unter der Dusche mal so auf ) wozu überhaupt einen left join auf user? Brauchst du überhaupt Daten daraus?
                              Ansonsten kann man sich den klemmen:
                              SELECT question.id, vote.id
                              FROM question
                              LEFT JOIN vote ON question.id = vote.question_id AND vote.user_id = 1
                              WHERE vote.user_id IS NULL
                              hab den code getestet und er funktioniert auch!

                              aber dass ich in einem Join ON ein skalaren wert mit einer Spalte vergleichen darf...woohoooo
                              Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
                              - ...und solche Behauptungen in "falsches Resourcenmanagement"

                              Kommentar

                              Lädt...
                              X