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

  • chuvak
    hat ein Thema erstellt Eine Art "Umfrage" basteln.

    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?

  • cetalian
    antwortet
    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.

    Einen Kommentar schreiben:


  • chuvak
    antwortet
    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...)

    Einen Kommentar schreiben:


  • chuvak
    antwortet
    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.

    Einen Kommentar schreiben:


  • chuvak
    antwortet
    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.

    Einen Kommentar schreiben:


  • ByStones
    antwortet
    Du willst doch alle Fragen über einen Nutzer holen die noch nicht beantwortet wurden ?

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • ByStones
    antwortet
    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

    Einen Kommentar schreiben:


  • chuvak
    antwortet
    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...

    Einen Kommentar schreiben:


  • cetalian
    antwortet
    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.

    Einen Kommentar schreiben:


  • chuvak
    antwortet
    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?

    Einen Kommentar schreiben:


  • cetalian
    antwortet
    In deinem Text ist nicht eine (edit: konkrete) Frage?

    Einen Kommentar schreiben:

Lädt...
X