So nun meine Fragen

  • Ich arbeite mit php:


    Hier mein SQL Auszug:


    -- phpMyAdmin SQL Dump
    -- version 2.11.8.1deb5+lenny3
    -- <!-- m --><a class="postlink" href="http://www.phpmyadmin.net">http://www.phpmyadmin.net</a><!-- m -->



    SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


    --
    -- Datenbank: `***`
    --


    -- --------------------------------------------------------


    --
    -- Tabellenstruktur für Tabelle `AntwortMoeglichkeit`
    --


    CREATE TABLE IF NOT EXISTS `AntwortMoeglichkeit` (
    `FrageID` varchar(20) default NULL,
    `AntwortID` varchar(20) default NULL,
    `Antwort` varchar(200) default NULL,
    FULLTEXT KEY `Antwort` (`Antwort`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;


    --
    -- Daten für Tabelle `AntwortMoeglichkeit`
    --


    INSERT INTO `AntwortMoeglichkeit` (`FrageID`, `AntwortID`, `Antwort`) VALUES
    ('F1', '', 'keine Antwort'),
    ('F1', '0', 'Das erst Mal'),
    ('F1', '1', 'oft'),
    ('F1', '2', 'sehr oft'),


    ('F3', '', 'keine Antwort'),
    ('F3', '0', 'nein, weiss; ich nicht'),
    ('F3', '1', 'ja, weiss ich, und zwar:'),


    --
    -- USW
    --
    -- Tabellenstruktur für Tabelle `EintraegeGaeste`
    --


    CREATE TABLE IF NOT EXISTS `EintraegeGaeste` (
    `ID` int(11) NOT NULL auto_increment,
    `schueler` varchar(20) NOT NULL,
    `computer_id` varchar(20) NOT NULL,
    `Transaktionsdatum` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    `Thema` varchar(50) NOT NULL,
    `Eintrag` varchar(3000) NOT NULL,
    `Betriebssystem` varchar(20) NOT NULL,
    `Browser` varchar(20) NOT NULL,
    PRIMARY KEY (`ID`),
    FULLTEXT KEY `Eintrag` (`Eintrag`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;


    --
    -- Daten für Tabelle `EintraegeGaeste`
    --


    INSERT INTO `EintraegeGaeste` (`ID`, `schueler`, `computer_id`, `Transaktionsdatum`, `Thema`, `Eintrag`, `Betriebssystem`, `Browser`) VALUES
    (2, 'Stephie Schmidt', '79.215.10.196', '2010-01-12 22:18:28', '2. Gästebuch', 'Ich musste ein 2. Gästebuch anlegen, da ich Programmierfehler hatte. Ich hoffe, dass jetzt alles funktioniert. Danke für die Hinweise', 'Linux', 'Mozilla/5.0 (X11; U;'),
    (5, 'Max', '79.215.7.40', '2010-01-13 17:53:38', 'schöne Homepage', 'ist das.\r\n', 'Windows XP', 'Mozilla/4.0 (compati'),
    (6, 'eddie.manU at *****', '87.170.51.54', '2010-01-13 18:42:04', 'Danke', 'Danke FRAU SCHMIDT für die tollen Aufgaben =) (=\r\n\r\n\r\ngz. Eddie Heinzmann KLasse 5/1 Goethe Gymnasium Auerbach', 'Windows XP', 'Mozilla/4.0 (compati'),
    (7, 'ulla.seidel at ***', '79.215.2.134', '2010-01-13 18:42:58', 'Mathe Brüche', 'Liebe Frau Schmidt,\r\ndanke für den Hinweis auf die Aufgaben auf Ihrer Website.\r\nMeine letzte Mail habe ich an eine andere Mailadresse geschickt, vielleicht ist es deshalb nicht bei Ihnen angekommen.\r\n\r\nViele Grüße & einen schönen Abend wünscht Ihnen Ihre Schülerin\r\nEsther Seidel Klasse 5/1', 'Windows XP', 'Mozilla/4.0 (compati');


    -- --------------------------------------------------------


    --
    -- Tabellenstruktur für Tabelle `Eintraege_Gaeste`
    --


    --
    -- Tabellenstruktur für Tabelle `Frage`
    --


    CREATE TABLE IF NOT EXISTS `Frage` (
    `FrageID` varchar(20) default NULL,
    `Frage` varchar(200) default NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;


    --
    -- Daten für Tabelle `Frage`
    --


    INSERT INTO `Frage` (`FrageID`, `Frage`) VALUES
    ('F1', 'Wie oft hast du schon meine Homepage besucht?'),
    ('F2', 'Wie oft informierst du dich ueber die Entscheidungen in deiner Stadt'),


    ('F4', 'Welche Note w&uuml;rdest du meiner Homepage geben?'),
    ('F5', 'W&uuml;rdest du meine Homepage wieder besuchen?'),
    ,
    ('F18', 'Schreibe dein Anliegen oder Deine Meinung'),
    ('F20', 'Thema'),


    (NULL, NULL);


    --USW


    -- --------------------------------------------------------


    --
    -- Tabellenstruktur für Tabelle `Fragebogen`
    --

    CREATE TABLE IF NOT EXISTS `Fragebogen` (
    `ID` int(11) NOT NULL auto_increment,
    `schueler` varchar(50) NOT NULL,
    `computer_id` varchar(20) default NULL,
    `FrageID` varchar(20) NOT NULL default '',
    `AntwortID` varchar(20) NOT NULL default '',
    `FreieAntwort` varchar(3000) default NULL,
    `Transaktionsdatum` timestamp NOT NULL default CURRENT_TIMESTAMP,
    PRIMARY KEY (`schueler`,`FrageID`,`AntwortID`,`ID`),
    FULLTEXT KEY `FreieAntwort` (`FreieAntwort`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


    --
    -- Daten für Tabelle `Fragebogen`
    --


    INSERT INTO `Fragebogen` (`ID`, `schueler`, `computer_id`, `FrageID`, `AntwortID`, `FreieAntwort`, `Transaktionsdatum`) VALUES
    (1, 'Stephie Schmidt', '79.215.10.196', 'F13', '', NULL, '2010-01-12 22:09:26'),
    (1, 'Stephie Schmidt', '79.215.10.196', 'F5', '', NULL, '2010-01-12 22:09:26'),
    (1, 'Stephie Schmidt', '79.215.10.196', 'F4', '', NULL, '2010-01-12 22:09:26'),
    (1, 'Stephie Schmidt', '79.215.10.196', 'F1', '', NULL, '2010-01-12 22:09:26'),
    (1, 'Stephie Schmidt', '79.215.10.196', 'F1', '2', NULL, '2010-01-12 22:11:17'),
    (1, 'Stephie Schmidt', '79.215.10.196', 'F4', '1', NULL, '2010-01-12 22:11:17'),
    (1, 'Stephie Schmidt', '79.215.10.196', 'F5', '2', NULL, '2010-01-12 22:11:17'),
    (1, 'Stephie Schmidt', '79.215.10.196', 'F13', '0', NULL, '2010-01-12 22:11:17'),
    (1, 'Max', '79.215.7.40', 'F13', '0', NULL, '2010-01-13 17:53:38'),
    (1, 'Max', '79.215.7.40', 'F5', '2', NULL, '2010-01-13 17:53:38'),
    (1, 'Max', '79.215.7.40', 'F4', '1', NULL, '2010-01-13 17:53:38'),
    (1, 'Max', '79.215.7.40', 'F1', '0', NULL, '2010-01-13 17:53:38'),
    (1, 'eddie.manU at ****', '87.170.51.54', 'F1', '0', NULL, '2010-01-13 18:03:14'),
    (1, 'eddie.manU at ***', '87.170.51.54', 'F4', '0', NULL, '2010-01-13 18:03:14'),
    (1, 'eddie.manU at ***', '87.170.51.54', 'F5', '2', NULL, '2010-01-13 18:03:14'),
    (1, 'eddie.manU at ***', '87.170.51.54', 'F13', '0', NULL, '2010-01-13 18:03:14'),
    (1, 'ulla.seidel at ***', '79.215.2.134', 'F1', '1', NULL, '2010-01-13 18:42:58'),
    (1, 'ulla.seidel at ***', '79.215.2.134', 'F4', '0', NULL, '2010-01-13 18:42:58'),


    -- --------------------------------------------------------
    Nun meine Probleme:


    Warum zählt der Zähler nicht weiter?


    In der ersten Version hatte ich keinen Zähler gesetzt, auf das Datum den Primärschlüssel gesetzt, allerdings kam jedes Mal eine Fehlermeldung, wenn der gleiche Name oder E-Mail-Adresse eingetragen wurde.
    Jetzt funktioniert es, aber der Zähler zählt nicht weiter...
    Stephie

  • Gib mal bei ID noch zusätzlich Primary Key an, daran wird es liegen.


    zu 2.


    Bei der abfrage z.B


    SQL
    1. SELECT nachricht FROM news ORDER BY id DESC LIMIT 30



    Das Limit gibt an wieviele einträge abgefragt werden sollen. In diesemfall 30. Dazu kann man noch das Order BY benutzen, was die einträge in der DB sortiert. Dann kommt nach: in dem Fall das feld id. und das DESC bedeutet absteigend.


    Fals du durchgehen IDs hast wird so immer die Größte ID zu erst angezeigt, und dann runtergezält. bis der 30 eintrag ausgegeben ist.


    Greetz TimTim


    **edit


    arr ein wenig zu spät.


    **edit 2


    SEhe gerade ist gesetzt verlesen.


    ich check mal kurz

  • die Tabelle Fragebogen würde ich noch einmal überdenken.


    Wenn ich das richtig sehe, erstellst du für jede Frage einen neue Zeile mit einem Schüler.


    ich würde die Tabelle anders mach, eventuell sogar 2 draus machen:


    1. Schüler (alle Daten für den Schüler)
    schueler_id
    name
    computer_id


    2. Antworten (Antworten und Schüler verbinden)
    _id
    schlueler_id
    frage1_id
    frage2_id
    use…


    quasi für jede Antwort eine Spalte erstellen.


    So hast du dann in einer Zeile die ID vom Schüler und die antworten. Ohne das Daten doppelt eingetragen werden.

  • So problem erkannt.


    Der primary Key heist nicht umsonnst so. 1. Ist er Unique das heist einzigartig, das soll er auch sein denn jeder datensatz soll eine eigene eindeutige id bekommen. Und man darf ihn auch nur 1 mal benutzen. Sonnst passiert das was bei dir passiert. Er wird nicht richtig angewendet.


    Dann funktioniert auch AI.


    Den nur in dieser verbindung macht der AI ja sinn. Sonnst weis MySQL nicht ob es die Zahl schoneimal gibt. Und schreibt immer die erste die ihm vorgegeben wird.


    Warum wolltest du den überall den primary setzen ?


    Dafür gibt es nacher den INDEX. Den setzt man auf alle felder die offt durchsucht werden.


    Hier mal die verbesserte variante.



    CREATE TABLE IF NOT EXISTS `fragebogen` (
    `ID` int(11) NOT NULL AUTO_INCREMENT,
    `schueler` varchar(50) NOT NULL,
    `computer_id` varchar(20) DEFAULT NULL,
    `FrageID` varchar(20) NOT NULL DEFAULT '',
    `AntwortID` varchar(20) NOT NULL DEFAULT '',
    `FreieAntwort` varchar(3000) DEFAULT NULL,
    `Transaktionsdatum` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`ID`),
    KEY `schueler` (`schueler`),
    KEY `computer_id` (`computer_id`),
    KEY `FrageID` (`FrageID`),
    KEY `AntwortID` (`AntwortID`),
    FULLTEXT KEY `FreieAntwort` (`FreieAntwort`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ;




    INSERT INTO `fragebogen` (`ID`, `schueler`, `computer_id`, `FrageID`, `AntwortID`, `FreieAntwort`, `Transaktionsdatum`) VALUES
    (1, 'Stephie Schmidt', '79.215.10.196', 'F13', '', NULL, '2010-01-12 22:09:26'),
    (2, 'Stephie Schmidt', '79.215.10.196', 'F5', '', NULL, '2010-01-12 22:09:26'),
    (3, 'Stephie Schmidt', '79.215.10.196', 'F4', '', NULL, '2010-01-12 22:09:26'),
    (4, 'Stephie Schmidt', '79.215.10.196', 'F1', '', NULL, '2010-01-12 22:09:26'),
    (5, 'Stephie Schmidt', '79.215.10.196', 'F1', '2', NULL, '2010-01-12 22:11:17'),
    (6, 'Stephie Schmidt', '79.215.10.196', 'F4', '1', NULL, '2010-01-12 22:11:17'),
    (7, 'Stephie Schmidt', '79.215.10.196', 'F5', '2', NULL, '2010-01-12 22:11:17'),
    (8, 'Stephie Schmidt', '79.215.10.196', 'F13', '0', NULL, '2010-01-12 22:11:17'),
    (9, 'Max', '79.215.7.40', 'F13', '0', NULL, '2010-01-13 17:53:38'),
    (10, 'Max', '79.215.7.40', 'F5', '2', NULL, '2010-01-13 17:53:38'),
    (11, 'Max', '79.215.7.40', 'F4', '1', NULL, '2010-01-13 17:53:38'),
    (12, 'Max', '79.215.7.40', 'F1', '0', NULL, '2010-01-13 17:53:38'),
    (13, 'xxx', '87.170.51.54', 'F1', '0', NULL, '2010-01-13 18:03:14'),
    (14, 'xxxe', '87.170.51.54', 'F4', '0', NULL, '2010-01-13 18:03:14'),
    (15, 'xxx', '87.170.51.54', 'F5', '2', NULL, '2010-01-13 18:03:14'),
    (16, 'xxx', '87.170.51.54', 'F13', '0', NULL, '2010-01-13 18:03:14'),
    (17, 'xxx', '79.215.2.134', 'F1', '1', NULL, '2010-01-13 18:42:58'),
    (18, 'xxx', '79.215.2.134', 'F4', '0', NULL, '2010-01-13 18:42:58'),
    (19, 'xxx', '79.215.2.134', 'F5', '2', NULL, '2010-01-13 18:42:58'),
    (20, 'xxxe', '79.215.2.134', 'F13', '0', NULL, '2010-01-13 18:42:58');

  • Und wenn es mal 100 Fragen sind ist das ne sehr seltsame Tabelle...


    Also eigentlich ist das schon korrekt so.


    TAblele Fragen


    Tabele Schüler


    Tablele Computer



    Und in der Dritten dann


    id, Schüler id, Frage id, Computer id, uhrzeit


    Dann kannst du die namen bzw Mail adresesen rauslassen und nur die ID der schüler eintragen ist nacher schneller beim durchsuchen. Und bei den rechnern genauso. Nur die ID der Rechner eintragen usw.



    Greetz TimTim


    **Edit


    Merke gerade das da n haufen Rechtschreibfehler drinn sind. Ich entschuldige mich.


    Falls interresse daran besteht die DB struktur zu überarbeiten (falls es nötig ist) würde ich gerne dabei helfen. Was dann nötig ist ist eine genaue beschreibung was genau gemacht wird.

  • Jop korrekt, aber das einzige was hier redundant ist, wäre die rechner IP, die könnte man in eine kürzere form bringen und dann die user ID.


    mehr nicht.


    Wenn dann nur die IDs drin stehen ist das korrekt.


    oder verstehen wir uns gerade falsch =)


    Aber um es genauer sagen zu können müsste man mehr infos haben.


    Greetz

  • Ich denke schon das wir das gleiche meinen xD


    Aber ich sehe (aufm ersten Blick) dass in Zeile 1-8: name, ip, und datum (ich denke wenn es am selben Tag ist wird die Uhrzeit keine rolle spiele.) gleich sind und das ist Redundant.


    Deswegen würde ich die Daten die mehrfach gespeichert werden in einer anderen Tabelle speichern. (so wie du *gg*)

  • Ok, nur keinen stress machen =).


    Falls du etwas nicht genau verstanden hast kann ich es gerne noch etwas ausführlicher schreiben. bzw. gleich einen link zu einem Tutorial hinzufügen =).



    Skanky Korrekt.
    Ich hab mir den hintergrund mal genauer angeschaut. Wegen dem schüler war ich bei einem System das wir mal bei uns an der schule haten. Mit test die über ein Modul gemacht werden konnten. Da wäre diese logig sinfoller.


    Für diesen fall würde ich auch diese lösung wählen wenn alles in die DB muss.


    tb user
    user_id, name, ip, uhrzeit


    tb Fragen


    id, frage


    tb Antworten-moeglich


    id, frage_id, antwort_id, antwort


    tb fragebogen


    id, user_id,frage_id,antwort_id,freie_antwort



    Dann gibt es keine redundanz.


    Greetz TimTim