Ankündigung

Einklappen
Keine Ankündigung bisher.

Eine Art "Umfrage" basteln

Einklappen

Neue Werbung 2019

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

  • Eine Art "Umfrage" basteln

    Ich möchte für eine Community eine Art Umfrage basteln, nach dem Facebook-Beispiel:
    Man hat virtuelle Freunde, zu denen man aus einem Fragenkatalog bestimmte Fragen mit ja/nein beantworten kann. Dabei kann man über den selben User keine Frage doppelt beantworten.
    Ich brauche also eine Abfrage über alle Freunde und alle Fragen, dann muss abgeglichen werden über welchen Freund schon welche Fragen beantwortet wurden.
    Wenn noch welche "verfügbar" sind, wird eine davon ausgegeben. Bei Beantwortung wiederholt sich der Prozess.

    Ich denke, dass ich genug Grundkenntnisse in PHP und MySQL habe, um dies zu realisieren, allerdings fehlt mir hier die richtige Idee.
    Es müssen ja 3 Abfragen parallel bzw. hintereinander gemacht werden, ich komme aber gedanklich nicht weiter...

    Tabelle Freunde:


    Tabelle Fragen:


    Tabelle Antworten:


    Kann mir jemand bitte einen Gedankenanstoß liefern?


  • #2
    In deinem Text ist nicht eine (edit: konkrete) Frage?

    Kommentar


    • #3
      Zitat von chuvak Beitrag anzeigen
      ... allerdings fehlt mir hier die richtige Idee.
      Es müssen ja 3 Abfragen parallel bzw. hintereinander gemacht werden, ich komme aber gedanklich nicht weiter...
      Kann mir jemand bitte einen Gedankenanstoß liefern?
      Ich möchte euch einfach bitten, mir eine Idee o.ä. zu geben, wie ich dies am besten realisieren könnte.

      PHP-Code:
      foreach($freunde as $freund['id'])
      {
         foreach(
      $fragen as $frage['id'])
         {
            
      mysql_query("SELECT* FROM antworten WHERE von_wem='201' AND ueber_wen = '$freund[id]' AND fragen_id = '$frage[id]'");
         }

      So ähnlich wäre meine erste "Struktur". Was sagt ihr dazu?

      Kommentar


      • #4
        Die Frage ist ja was du willst. Im Allgemeinen würde ich zweimal verschachtelte for Schleifen die einen Select * (btw * vermeiden) ausführen meiden wie ein Hotdog einen amerikanischen Fresswettbewerb.

        Da kann man ja nach Fragestellung schöne SQL-Queries brauen, gib doch mal ein konkretes Beispiel.

        Kommentar


        • #5
          Dies wären meine Überlegungen:
          Code:
          $sql1 = "SELECT freunde_id FROM freunde where user_id='$meine_ID";
          
          $sql2 = "SELECT fragen_text from fragen";
          
          $sql3 = "SELECT fragen_id from antworten WHERE von_wem = '$meine_ID' AND ueber_wen = '$freunde_id'";
          Die Abfragen müssten aber verschachtelt werden und genau das fehlt mir die Vorstellungskraft...

          Kommentar


          • #6
            Ich denke du müsstest mit LEFT JOIN weiterkommen: SQL Tutorial - LEFT JOIN / RIGHT JOIN

            Ich hab mal das so gebastelt, bin mir aber net ganz sicher ob du dir das so vorstellst ?
            Code:
            SELECT * FROM fragen LEFT JOIN antworten ON fragen_id=antworten.fragen_id LEFT JOIN freunde ON freunde.freunde_id=antworten.ueber_wen HAVING antworten.ueber_wen IS NULL
            Signatur:
            PHP-Code:
            $s '0048656c6c6f20576f726c64';
            while(
            $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

            Kommentar


            • #7
              Das ist doch keine Überlegung, das sind SQL Statements. Eine Überlegung wäre "Alle Fragen eines Nutzers" oder sowas

              Kommentar


              • #8
                Du willst doch alle Fragen über einen Nutzer holen die noch nicht beantwortet wurden ?
                Signatur:
                PHP-Code:
                $s '0048656c6c6f20576f726c64';
                while(
                $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

                Kommentar


                • #9
                  Zitat von ByStones Beitrag anzeigen
                  Du willst doch alle Fragen über einen Nutzer holen die noch nicht beantwortet wurden ?
                  Genau. Alle Fragen über meine "Freunde", die noch nicht beantwortet wurden.

                  Kommentar


                  • #10
                    Zitat von ByStones Beitrag anzeigen
                    Ich hab mal das so gebastelt, bin mir aber net ganz sicher ob du dir das so vorstellst ?
                    Code:
                    SELECT * FROM fragen LEFT JOIN antworten ON fragen_id=antworten.fragen_id LEFT JOIN freunde ON freunde.freunde_id=antworten.ueber_wen HAVING antworten.ueber_wen IS NULL
                    Ja, so ähnlich stelle ich mir das auch vor, allerdings liefert mir MySQL ein leeres Resultat zurück...

                    Wenn ich "HAVING" auslasse, erscheinen einfach alle meine Antworten mit den dazugehörigen Daten, ansonsten bleibts leer.

                    Kommentar


                    • #11
                      Zitat von cetalian Beitrag anzeigen
                      Das ist doch keine Überlegung, das sind SQL Statements. Eine Überlegung wäre "Alle Fragen eines Nutzers" oder sowas
                      Alle Fragen über meine Freunde, die noch nicht (von mir über meine Freunde) beantwortet wurden.

                      Mein id: 201
                      Meine Freunde: 101, 102, 103
                      Mögliche Fragen: 1, 2, 3

                      In diesem Fall wurden von mir über den User 101 ALLE möglichen Fragen und über den User 102 Fragen 1-2 beantwortet.
                      Somit bleibt noch Frage 3 über User 202 und alle Fragen (1, 2, 3) über User 103.

                      (Hoffentlich ist das einigermaßen verständlich...)

                      Kommentar


                      • #12
                        Hey, da du mich so lieb bittest versuche ich mal meine Meinung dazu zu sagen... bin aber echt kein SQL Profi.

                        Spontan würde ich einen Select machen der mir die IDs und Texte der Fragen liefert die nicht in den Ids eines Subselects sind. Dieser Subselect selected einfach alle Fragen-Ids von beantworteten Fragen wo die entsprechenden Ids sind.

                        Leider bin ich da total eingerostet was Subselects angeht und meine auch, dass sie nicht unbedingt performant sind. Vielleicht kannst du dir ja aus meinem Text mit Google und MySQL Handbuch was basteln.

                        Kommentar

                        Lädt...
                        X