Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 20
  1. #1
    Registriert seit
    07 2008
    Beiträge
    9

    Brauche Hilfe bei mySQL

    Hallo
    also wir sollein paar Aufgaben zu mySQL bearbeiten/lösen. War auch grösstenteils kein Problem. Nur bei einer Aufgabe komme ich net weiter. Habe schon 2 Lösungen dazu eingereicht aber beide sind laut dem Leiter falsch.
    Also hier die Tabellen und BspDaten die wir in Aufgabe 1 und 2 machen sollten bzw die ja für die 3. Aufgabe benötigt wird:

    -- Aufgabe 1:
    CREATE TABLE Benutzer (nummer INT PRIMARY KEY, name CHAR(50),
    email CHAR(50), gesperrt BOOL);
    CREATE TABLE Exemplar (isbn CHAR(13) PRIMARY KEY, autor CHAR(50),
    titel CHAR(50), jahr INT, ausleihbar BOOL);
    CREATE TABLE Ausleihe (tag INT, benutzernr INT, exemplarisbn CHAR(13));
    CREATE TABLE Vormerkung (erstellTag INT, benachrTag INT,
    benutzernr INT, exemplarisbn CHAR(13));


    -- Aufgabe 2:
    INSERT INTO Benutzer VALUES (1, 'Bartusch', 'bartusch@web.de', 0);
    INSERT INTO Benutzer VALUES (2, 'Lehmann', 'lehmann@web.de', 0);
    INSERT INTO Benutzer VALUES (3, 'Kohlack', 'kohllack@web.de', 0);
    INSERT INTO Exemplar VALUES ('9783836211468', 'Ullenboom', 'Java is auch ein Insel', 2007, 1);
    INSERT INTO Exemplar VALUES ('9783499612039', 'Erlenkötter', 'Java-Programmieren von Anfang an', 2001, 1);
    INSERT INTO Exemplar VALUES ('9783827413895', 'Balzert', 'UML 2 kompakt', 2005, 1);
    INSERT INTO Ausleihe VALUES (11, 3, '9783836211468');
    INSERT INTO Ausleihe VALUES (13, 3, '9783499612039');
    INSERT INTO Ausleihe VALUES (12, 1, '9783827413895');
    INSERT INTO Vormerkung VALUES (14, 0, 1, '9783836211468');
    INSERT INTO Vormerkung VALUES (13, 0, 2, '9783499612039');
    INSERT INTO Vormerkung VALUES (13, 0, 2, '9783827413895');
    INSERT INTO Vormerkung VALUES (12, 0, 3, '9783827413895');


    Das is auch alles korrekt laut dem Leiter. Nun kommt die Aufgabenstellung zu 3.:

    Ausgabe der Titel der Exemplare, die innerhalb der kommenden 7 Tage (heute..heute+6)
    zurückgegeben werden müssen zusammen mit dem Namen des leihenden Nutzers und den
    verbleibenden Resttagen. Nehmen sie eine Leihfrist von 14 Tagen an und heute sei Tag 18.

    Hier mein letzter Lösungsversuch:

    SELECT Benutzer.name,Exemplar.titel
    FROM Benutzer INNER JOIN Exemplar INNER JOIN(
    SELECT Ausleihe.exemplarisbn, Ausleihe.benutzernr
    FROM Ausleihe
    WHERE Ausleihe.tag+14<=25)
    ON Ausleihe.benutzernr=Benutzer.nummer AND Exemplar.isbn=Ausleihe.exemplarisbn;

    Ist laut Leiter nicht ausführbar bzw falsch. Ich weiss nun echt net mehr weiter wie ich das nun machen soll. Wäre nett wenn mir da einer weiterhelfen könnte.
    MFG

  2. #2
    Registriert seit
    12 2007
    Ort
    Südpfalz
    Beiträge
    1.307

    Cool easy-peasy

    Deins ist falsch, weil du zwei Inner joins hast, von denen bei einem die ON-Bedingung fehlt. Die kann man wohl weglassen, wenn man das stattdessen in eine WHERE-Klausel packt, aber von diesem neumodischen Kram halt ich nichts.

    &#220;brigens brauchst du hierf&#252;r auch keinen Subselect. Und was die Praxisrelevanz angeht: Sag dem Kursleiter, das ist Murks. Da geh&#246;ren DATE-Felder rein, keine INT-Werte. "Heute ist Tag 18" ist quark - normalerweise arbeitet man mit Date-Feldern und Funktionen wie Current_Date (oder wie das &#196;quivalent dazu bei MySQL hei&#223;t), und programmiert sowas flexibel, so dass es an jedem Tag ausgef&#252;hrt werden kann und IMMER die n&#228;chsten 7 Tage zeigt.

    Aber um erstmal dein Problem zu l&#246;sen (du musst das halt so hinnehmen, auch wenn es v&#246;lliger Quark ist, wie diese Datenbank aufgebaut wurde):

    Code:
    SELECT Exemplar.Titel,
           Benutzer.Name,
           (Ausleihe.Tag - 4) as Resttage
      FROM Benutzer
     INNER JOIN Ausleihe on Ausleihe.Benutzernr = Benutzer.Nummer
     INNER JOIN Exemplar on Ausleihe.exemplarisbn = Exemplar.isbn
     WHERE (Ausleihe.Tag + 14) BETWEEN 18 and 24
     ORDER BY (Ausleihe.Tag -4) ASC, Benutzer.Name ASC, Exemplar.Titel ASC
    Das w&#252;rde auf jeden Fall funktionieren.

    Zur Erkl&#228;rung: Die 24 entsteht aus 18+6, und die -4 beim Ausleihetag ist Ausleihe.Tag + 14 (Tage Leihfrist) -18 (Heute) - schreib vielleicht statt -4 besser +14 -18 damit klar ist, dass du es richtig hergeleitet hast.

    Die ORDER BY-Klausel war Addon - sie w&#252;rde zuerst alle B&#252;cher anzeigen, die heute f&#228;llig werden, dann die von morgen, dann die von &#220;bermorgen... - und innerhalb der Resttage-Laufzeiten sortiert nach Benutzername und innerhalb des Benutzernamens nach Titel. Sortierung jeweils ASC(ending), also aufsteigend, im Gegensatz zu DESC(ending) f&#252;r absteigend.

    Falls dein Lehrer meint, dass das NICHT funktioniert, m&#246;ge er sich bitte umgehend bei mir melden - ich erkl&#228;re es ihm dann.
    Geändert von WITM55 (24.07.2008 um 10:20 Uhr)
    Beste Grüße,
    WITM55

    sicherer E-Mail-Kontakt: Über den Schlüssel 3DE6FF44 (zum Beispiel über Server http://wwwkeys.de.pgp.net/ mit dem Suchstring 0x3DE6FF44 zu beziehen)

    Code:
    BOFH Excuse #227: Fatal error right in front of screen.

  3. #3
    Registriert seit
    07 2008
    Beiträge
    9
    Hey
    erstaml grosser Dank an deine schnelle Antwort. Ich weiss auch das es wolh um l&#228;ngen einfacher w&#228;hre mit Date zu arbeiten, aber Vorgabe is Vorgabe und somit muss ich es so wie du sagtest hinnehmen.
    Nun zu deinen Vorschlag. Ich sehe gerade -4 ^^
    das kommt mir sehr bekannt vor aus meiner allerersten L&#246;sung wo ich ohne JOIN gearbeitet habe.
    Hier der Code:
    SELECT Exemplar.Name, Benutzer.name, Ausleihe.tag-4
    FROM Exemplar, Benutzer, Ausleihe
    WHERE Benutzer.nummer=Ausleihe.benutzernr AND Ausleihe.exemplarisbn=Exemplar.isbn AND Ausleihe.tag+7>=25

    war auch falsch, aber sehe das ein kleiner Ansatz davon ja gar nicht so verkehrt ist. So weit ich jetzt aber durchgegangen bin klingt dein L&#246;sungsvorschlag sehr plausibel. Leider kann ich es net testen da keine mySQL Version auf meinem Rechner l&#228;uft (XP 64 Bit). Habe zwar eine 64 Bit version runtergeladen l&#228;sst sich aber nicht installieren, somit arbeite ich mehr oder weniger von hand umd zu schauen was ausgegeben wird ^^
    Danke nochmal f&#252;r deine schnelle Hilfe.

  4. #4
    Registriert seit
    05 2006
    Ort
    Berlin
    Beiträge
    1.387
    Mahlzeit,

    sauge dir doch VMWare, dann haust du dort fix ein 32Bit OS drauf und kannst es dann testen. Ansonsten sollte mysql auch auf einer 64bit platform laufen.


    Hier bekommst du eine explizit 64Bit f&#228;hige Version vom MySQL Server. Sollte dieser tats&#228;chlich nicht funktionieren, dann installiere dir die 32bit Version. Die sollte auch laufen.

    MySQL :: MySQL 5.0 Downloads



    MfG Mav
    Soo genau muss eine Fehlerbeschreibung gar nicht sein.
    Dank unserer übersinnlichen Fähigkeiten reicht ein einfaches "Es geht net." vollkommen aus.
    Parapsychologie ist was feines...

    Chaos ist nur eine Form der Ordnung die wir verlernt haben.

  5. #5
    Registriert seit
    07 2008
    Beiträge
    9
    so hab noch mal was nachgeschaut da mir die tag-4 sehr bekannt vorkam.
    Er hatte also Kommentar f&#252;r meine aller erste L&#246;sung wie ich in #3 Post schrieb folgendes: tag-4 gibt immer das Datum zurueck, welches 4 Tage vor der Ausleihe lag
    und nicht die Resttage

    deswegen dachte ich mit -4 w&#228;re alles falsch eben weil es kein eigentliches Datum gibt.

  6. #6
    Registriert seit
    12 2007
    Ort
    Südpfalz
    Beiträge
    1.307
    Da hat er leider Unrecht - es ist so:

    Die Resttage liegen zwischen HEUTE und dem Ausleihtag + 14 Tage (Leihfrist). Heute ist der 18.

    Hier ein Beispiel...

    Ausleihtag: 10.
    Ausleihende: 10 + 14 = 24
    Tag heute: 18

    Differenz von Heute zu 24 (aka Ausleihende): 24 - 18 = 6 Tage.

    Ausleihtag - 4 = 10 - 4 = 6

    Fehler deines Leiters: Er interpretiert Ausleihtag -4 als DATUM - korrekt ist aber: interpretiere es als quantitativen Ausdruck der restlichen Leihdauer. Die -4 ergeben sich ja nur wegen der Konstellation aus "14 Tage Leihfrist" und "Heute ist Tag 18" - bei "Heute ist Tag 12" w&#228;re es "Ausleihtag +2" gewesen.

    Gefordert waren ja die Resttage, und das ist in der Tat die+14 -18 (verk&#252;rzt: -4) Variante. Da ist der Leiter selbst dran schuld - mathematisch ist es einwandfrei so.

    EDITH sagt: Sag ihm einen sch&#246;nen Gru&#223; von mir. Das Problem mit Ausleihe.Tag - 4 als Interpretation eines Datums hat er nur, weil er einen INT-Wert als "Datum" einsetzt. W&#228;re der Tag ein Date-Feld, w&#228;re die L&#246;sung wohl eher so:

    datediff( adddate(Ausleihe.Tag,14), curdate())

    Das rechnet 14 Tage zum Ausleihetag und berechnet die Differenz in Tagen zum aktuellen Datum davon, was der Anzahl an Resttagen entspricht.

    Seine MUSTERL&#214;SUNG h&#228;tte ich gerne gesehen.

    Aber schreib doch statt -4 wirklich rein: Ausleihe.Tag + 14 -18.

    EDITH2: W&#228;re der Ausleihetag ein Datumsfeld, dann w&#228;re das korrekte SQL-Statement f&#252;r eine flexible Auswertung (von heute 7 Tage in die Zukunft):

    Code:
    SELECT Exemplar.Titel,
           Benutzer.Name,
           datediff(adddate(Ausleihe.Tag,14), curdate()) as Resttage
      FROM Benutzer
     INNER JOIN Ausleihe on Ausleihe.Benutzernr = Benutzer.Nummer
     INNER JOIN Exemplar on Ausleihe.exemplarisbn = Exemplar.isbn
     WHERE datediff(adddate(Ausleihe.Tag,14), curdate()) between 0 and 6
     ORDER BY 3, 2, 1
    Alle Titel, die 0 bis 6 Resttage in der Ausleihe haben - und zwar mit den korrekten MySQL-Funktionen. qed.

    Mail ihm dieses Statement mal auch zu, quasi als "Bonus". ORDER BY 3,2,1 sortiert nach der 3., dann nach der 2., dann nach der 1. Spalte - also erst nach Resttage, dann nach Benutzername und dann nach Buchtitel.
    Geändert von WITM55 (24.07.2008 um 13:07 Uhr)
    Beste Grüße,
    WITM55

    sicherer E-Mail-Kontakt: Über den Schlüssel 3DE6FF44 (zum Beispiel über Server http://wwwkeys.de.pgp.net/ mit dem Suchstring 0x3DE6FF44 zu beziehen)

    Code:
    BOFH Excuse #227: Fatal error right in front of screen.

  7. #7
    Registriert seit
    07 2008
    Beiträge
    9
    Ok werd ich machen.
    Also ist dein Lösungsvorschlag wohl richtig, da ich auf genau das geforderte "Ergebniss" komme wenn ich es durchgehe. Ich danke dir nochmals für deine schnelle und kompetente Hilfe und du kannst dir sicher sein das ich es ihm wie du sagtest schreibe.
    Die Musterlösung wird der feine Herr aber bestimmt nicht rausgegeben, da er die Aufgaben jedes Jahr verwendet, von daher denke ich mal wird er da sicher auch keine Ausnahme machen, da er sich sonst neu Aufgaben ausdenken müsste und das scheint ihm ein zu hoher Arbeitsaufwand zu sein.
    Das einzige was mich wirklich daran stört das eben so wie ich es als erstes gemacht habe eben mit diesen -4 als falsch gewertet wurde. Sicher mag der rest an dem Befehl nicht wirklich richtig gewesen sein, aber eben zu etwas korrektem so einen Kommentar drunter zu schreiben is mir ein Rätsel.
    Nochmals Danke. Ich werde mir das heute Abend nochmal zu gemüte führen und wenn es noch fragen gibt schreib ich sie hier rein.
    @MaverrickTM:
    ja genau da hab ich es runtergeladen eben für die 64 Bit Version von Windoof XP. Eine 32 Bit Version möchte ich nur ungern verwenden da ich mehr als 4 GB Arbeitsspeicher (8GB um genau zu sein)habe und die auch nutzen will.
    Es lässt sich halt absulut nicht installieren und habe auch schonmal im IRC #mySQL.de um Hilfe gebeten, wo mir aber keiner weiterhelfen konnte an was es nu liegen könnte. Selbst nach dem ich den Rechner formatiert hatte, lief es net.

  8. #8
    Registriert seit
    12 2007
    Ort
    Südpfalz
    Beiträge
    1.307
    Kein Problem, hab dir gern geholfen.

    Wie gesagt, interessiert h&#228;tte mich die Musterl&#246;sung schon; da bin ich recht neugierig drin. Ist ja auch quasi mein "Fachgebiet" (habe zum Beispiel eine Weiterbildung zum Datenbankorganisator gemacht und arbeite auch als Datenmanager hier in der Bank).
    Beste Grüße,
    WITM55

    sicherer E-Mail-Kontakt: Über den Schlüssel 3DE6FF44 (zum Beispiel über Server http://wwwkeys.de.pgp.net/ mit dem Suchstring 0x3DE6FF44 zu beziehen)

    Code:
    BOFH Excuse #227: Fatal error right in front of screen.

  9. #9
    Registriert seit
    05 2006
    Ort
    Berlin
    Beiträge
    1.387
    Du kannst den 32Bit MySQL Server trotzdem unter windowsXP64 laufen lassen. Dann l&#228;uft der MySQL Server halt nur in einem 32bit Modus. So lange du die Datenbank nicht produktiv nutzt sollte das v&#246;llig egal sein.

    Die MySQL Datenbank kann im 32Bit modus (Ohne LAA & VAS Flag) bis zu 1,8 GB Ramspeicher ausnutzen. Das sollte wohl mehr als genug sein f&#252;r deine tests

    Es ist also nicht schlimm auf der 64bit Machine 32Bit Programme laufen zu lassen, denn nur diese einzelnen programme laufen mit 32bit, ansonsten l&#228;uft alles andere weiter mit 64bit. Ebenso kannst du auch deine 8GB Ram weiter nutzen Macht somit keinen unterschied.


    MfG Mav
    Soo genau muss eine Fehlerbeschreibung gar nicht sein.
    Dank unserer übersinnlichen Fähigkeiten reicht ein einfaches "Es geht net." vollkommen aus.
    Parapsychologie ist was feines...

    Chaos ist nur eine Form der Ordnung die wir verlernt haben.

  10. #10
    Registriert seit
    07 2008
    Beiträge
    9
    mmmhhhh dann werd ich mal die 32Bit Version probieren. Wirklich produktiv nutzen will ich wie du schon sagtest mySQL nicht, halt nur für die paar Aufgaben und dafür sollten sogar einige kbyte reichen ^^.
    Ich wusste halt net das die SQL version mit 32bit auch auf 64Bit XP läuft.
    Ich will den Arbeitsspeicher im bereich Spiele und Videomaking verwenden, deswegen mehr als 4 GB und deswegen 64Bit Windooof. :P
    so werds mal versuchen obs läuft. Danke für den Hinweis.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Brauche Dringend Hilfe
    Von samy8 im Forum Komponenten
    Antworten: 5
    Letzter Beitrag: 23.08.2007, 05:50
  2. Brauche dringend Hilfe
    Von Moon33 im Forum Mobiles
    Antworten: 5
    Letzter Beitrag: 08.08.2006, 18:09
  3. Brauche dringend Hilfe !!
    Von bebob im Forum CPU & RAM
    Antworten: 4
    Letzter Beitrag: 06.12.2005, 16:43
  4. Brauche dringend Hilfe!!
    Von brixx im Forum Windows Clients
    Antworten: 1
    Letzter Beitrag: 28.02.2005, 17:00
  5. UNMOUNTABLE_BOOT_VOLUME?? Brauche Hilfe
    Von andy-b23 im Forum Storage
    Antworten: 1
    Letzter Beitrag: 21.09.2003, 10:33

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •