Ankündigung

Einklappen
Keine Ankündigung bisher.

SQL-Abfrage für Quiz

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • SQL-Abfrage für Quiz

    Hallo zusammen,
    ich hab folgendes Problem:

    Ich will ein Quiz bauen, mit sagen wir mal 2 Fragen (könnten später mal mehr werden). für jede Frage gibt es drei antworten. Am ende muss der user seinen namen, email etc blabla eingeben.

    Ich will jetz mit mysql nur diejenigen user ausgeben, die BEIDE fragen richtig beantwortet haben. Ein kumpel meinte, es geht mit inner join...mit einer frage is es kein problem, mit mehreren schon.

    meine Tabellen:

    user:
    - user_id (primary)
    - name
    - email
    - antwort1
    -antwort2

    fragen:
    - frage_id
    - frage
    - richtige_antwort

    Wie gesagt mit einer frage wärs kein problem aber bei mehreren funktionierts nicht, evtl weil er 2 werte mit "richtige antwort vergleichen muss.

    Habs so probiert:
    SELECT name, email
    FROM user
    INNER JOIN fragen
    ON user.antwort1 = fragen.richtige_antwort
    AND user.antwort2 = fragen.richtige_antwort

    Außerdem hab ichs schon mit ner kreuztabelle user_id / frage_id und folgender Abfrage probiert:
    SELECT *
    FROM user
    INNER JOIN user_fragen ON user.user_id = user_fragen.user_id
    INNER JOIN fragen ON user_fragen.antwort = fragen.richtig

    Das funktioniert zwar, allerdings gibt er mir hier logischerweise die user mit den richtigen antworten 2x aus,da 2 fragen...

    Was mach ich hier noch falsch bzw wie könnte ich das lösen?

    Danke schonmal!


  • #2
    Schau Dir mal das hier zum Thema INNER JOIN an:

    Mit JOIN zwei Tabellen zu einer virtuellen Tabelle kombinieren

    dort findest Du die Lösung.

    Wolf29
    while (!asleep()) sheep++;

    Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

    Kommentar


    • #3
      Zitat von jackReacher Beitrag anzeigen
      Ich will ein Quiz bauen, mit sagen wir mal 2 Fragen (könnten später mal mehr werden). für jede Frage gibt es drei antworten. Am ende muss der user seinen namen, email etc blabla eingeben.

      Ich will jetz mit mysql nur diejenigen user ausgeben, die BEIDE fragen richtig beantwortet haben. Ein kumpel meinte, es geht mit inner join...mit einer frage is es kein problem, mit mehreren schon.

      meine Tabellen:

      user:
      - user_id (primary)
      - name
      - email
      - antwort1
      -antwort2

      fragen:
      - frage_id
      - frage
      - richtige_antwort
      Die Tabellen müssen weiter normalisiert werden, dann klappt es mit dem Query auch besser.

      Vorschlag zu drei Tabellen:

      Code:
      user:
      - user_id (primary)
      - name
      - email
      
      user_antwort:
      - user_antwort_id (primary)
      - user_id
      - frage_id
      - antwort
      
      fragen:
      - frage_id (primary)
      - frage
      - richtige_antwort
      Grüße
      Thomas

      Kommentar


      • #4
        @Wolf: Danke für den Link, kämpf mich grad durch aber irgendwie komm ich noch nicht auf die lösung

        @Thomas: Habs grad gemacht aber ergebnis bleibt das selbe des kann doch nicht so schwer sein....

        Lg

        Kommentar


        • #5
          Liefer doch mal Deine aktuellen CREATE TABLE ( der drei Tabellen mit ein paar Testdaten) plus den aktuellen Query, mal schauen voran es liegt.

          Grüße
          Thomas

          Kommentar


          • #6
            Ok, hier der dump:

            Code:
            -- phpMyAdmin SQL Dump
            -- version 3.2.2
            -- http://www.phpmyadmin.net
            --
            -- Host: localhost
            -- Erstellungszeit: 10. Juni 2010 um 12:16
            -- Server Version: 5.1.45
            -- PHP-Version: 5.3.2
            
            SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
            
            --
            -- Datenbank: `quiz`
            --
            
            -- --------------------------------------------------------
            
            --
            -- Tabellenstruktur für Tabelle `fragen`
            --
            
            CREATE TABLE IF NOT EXISTS `fragen` (
              `frage_id` int(3) NOT NULL AUTO_INCREMENT,
              `frage` varchar(255) NOT NULL,
              `richtig` varchar(3) NOT NULL,
              PRIMARY KEY (`frage_id`)
            ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
            
            --
            -- Daten für Tabelle `fragen`
            --
            
            INSERT INTO `fragen` (`frage_id`, `frage`, `richtig`) VALUES
            (1, 'Das ist Frage 1', '1a'),
            (2, 'Das ist Frage 2', '2b');
            
            -- --------------------------------------------------------
            
            --
            -- Tabellenstruktur für Tabelle `user`
            --
            
            CREATE TABLE IF NOT EXISTS `user` (
              `user_id` int(3) NOT NULL AUTO_INCREMENT,
              `name` varchar(100) NOT NULL,
              `vorname` varchar(100) NOT NULL,
              `email` varchar(100) NOT NULL,
              `telefon` varchar(100) NOT NULL,
              `strasse` varchar(100) NOT NULL,
              `plz` int(5) DEFAULT NULL,
              `ort` varchar(100) NOT NULL,
              PRIMARY KEY (`user_id`)
            ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
            
            --
            -- Daten für Tabelle `user`
            --
            
            INSERT INTO `user` (`user_id`, `name`, `vorname`, `email`, `telefon`, `strasse`, `plz`, `ort`) VALUES
            (1, 'Kleinert', 'Robert', 'info@pixelfenster.de', '0867981342', 'Eimannsbergerstr.10', 84547, 'Emmerting'),
            (2, 'Scherzer', 'Eva', 'scherzer_eva@yahoo.de', '0863195551', '', NULL, ''),
            (3, 'Kleinert', 'Thomas', 'info@breed-online.de', '0867981342', '', NULL, '');
            
            -- --------------------------------------------------------
            
            --
            -- Tabellenstruktur für Tabelle `user_fragen`
            --
            
            CREATE TABLE IF NOT EXISTS `user_fragen` (
              `user_fragen_id` int(3) NOT NULL AUTO_INCREMENT,
              `user_id` int(3) NOT NULL,
              `frage_id` int(3) NOT NULL,
              `antwort` varchar(255) NOT NULL,
              PRIMARY KEY (`user_fragen_id`)
            ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
            
            --
            -- Daten für Tabelle `user_fragen`
            --
            
            INSERT INTO `user_fragen` (`user_fragen_id`, `user_id`, `frage_id`, `antwort`) VALUES
            (1, 1, 1, '1a'),
            (2, 1, 2, '2b');
            Und hier meine aktuelle Abfrage:
            Code:
            SELECT name
            FROM user
            INNER JOIN user_fragen ON user.user_id = user_fragen.user_id
            INNER JOIN fragen ON user_fragen.antwort = fragen.richtig
            Danke!

            Kommentar


            • #7
              SQL-Abfrage für Quiz - SELFPHP Forum

              Bitte beachten: Anmerkungen zu Crosspostings


              [MOD: Thread geschlossen]
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar

              Lädt...
              X