Tabellen in Musikerdatenbank

  • Nabend,


    ich möchte eine kleine, feine Musikerdatenbank anlegen.


    -verschiedene Musiker (Tabelle Musiker)
    -verschiedenen Instrumente (Tabelle Instrumente)


    Ich möchte, daß jeder Musiker so viele Instrumente auswählen kann wie er spielt. Dazu soll der Musiker auch noch seine Fahigkeitsstufe angeben (1-10)


    Rein thoretisch würde ich diese wieder in einer extra Tabelle abspeichern (Tabelle instrumentSkill)


    zB.:
    MusikerID = 10
    InstrumentID = 4
    SkillID(Fähigkeitsstufe) = 7


    So könnte ein Musiker verschiedene Instrumente mit unterschiedlichen Fähigkeitsstufen eintragen.


    Frage ist nur, wie sucht man später danach?


    In der entsprechenden Tabelle stehen ja nur Ziffern. Wenn also nun jemand einen Gitarristen sucht, wie mach ich das dann?


    Beste grüße
    derDenis

  • Hi Cybergreek,
    das hilft mir irgendwie nicht. Ich haben so ein klassisches Suchfeld, dort sucht jemand nach Gitarrist. In der Tabelle instrumentSkill sind ja nur die fremdschlüssel gespeichert und nicht das Wort "Gitarre".


    Oder muß ich erst abfragen, welchen Fremdschlüssel die Gitarre hat und DANN in der Tabelle instrumentSkill suchen?


    Grüße
    derDenis

  • Hallo Denis,
    ich denke mal, Du hast ein Formular mit einer Auswahlliste für die Mehrfachauswahl. Diese wird wird aus der Tabelle Instrumente gefüllt. Bei Option gibst Du den Instrumentennamen und bei Value die InstumentID an, denn nur die interessiert Dich für die Datenbanksuche.

  • Ja, das geht. Die Frage ist, was Du für Vorkenntnisse hast?


    Was würdest Du für ein Select erstellen, wenn die Namen in einer Tabelle wären?
    Weißt Du wieder mehrere Tabellen in einem Select miteinander verbinden kannst?
    Willst es so machen, dass Du was dazu lernst? (=> Join)

    Grüße vom Griechen,
    Cybergreek!

  • Sicher geht es auch mit einer Freitextsuche, aber der Suchende weiß ja nicht, welche Instrument angeboten werden und kann dann auch immer nur nach einem Instrument suchen. Ist umständlich und führt häufig zur antwort: nichts gefunden.
    Die Auswahlliste wird doch in einer Schleife gefüllt, dass sind nicht mehr als vielleicht 10 bis 15 PHP-Programmzeilen, egal ob 20 oder 100 Instrumente.


    Wir kennen Deine Vorkenntnisse nicht, vielleicht helfen Dir die Workshops http://www.traum-projekt.com/coding/php_apache/ "Newsysteme mit PHP und MySQL" oder die Workshoptutorials unter http://www.traum-projekt.com/f…-workshops-und-tutorials/ um, dort gibt es eine ganze Serie zur Formularverarbeitung.


    Oder: http://de.wikibooks.org/wiki/E…n_SQL:_Inhaltsverzeichnis besonders unter Grundlagen DML 1und Fortgeschrittene: Mehrere Tabellen.

  • hmmm,


    also eine suche könnte ggf. so aussehen...


    "Gitarrist in Köln gesucht" dh. ich suche im Musikerprofil nach der Stadt und dem Instrument. Bei der Freitextsuche müßte ich halt immer das komplette Profil durchsuchen.


    Was mich an dem Auswahlfeld ärgert, ist, daß es so groß wird, bei vielen Instrumenten.


    Der Denis


    Ich

  • Wenn Du so viele Instrumente erwartest, dann teile diese doch weiter auf .. Schlag- / Saiten- / Blasinstrumente, etc.
    .. und mich als Nutzer stört ein langes Auswahlfeld übrigens nicht. Ich mein, wie oft scrollen ich mich in Shops durch180 Länder, um "Germany" zu finden ;) .. ich finds immer noch angenehmer, als selbst tippen zu müssen ..

  • Wildmiezes Vorschlag ist durchaus eine Überlegung wert, würde aber eine zusätzliche Spalte in der Instrumententabelle und normalerweise eine zusätzliche Tabelle für die Instrumentenart bedeuten. Die Unterlisten im Formular könnten dann mit Ajax gefüllt werden.
    Im Auswahlfeld für die Instrumente sollten auch nicht alle existierenden Instrumente (aus der Intrumententabelle) stehen, sondern nur die, die auch von den erfassten Musikern (Verknüpfung aus Musikertabelle und Instrumententabelle) gespielt werden. Sonst bekommt man sehr oft die Meldung "Nichts gefunden" und besucht Deine Seite nie wieder.
    Die Länge der Liste ist meist zweitrangig, da man bei Eingabe des ersten Buschstaben ja schon gelenkt wird.
    Besonders am Anfang, wenn die DB noch nicht richtig gefüllt ist, sieht man mit so einer Liste schnell, was man an Ergebnissen erwarten kann. Und wenn exotische Instrumente erfasst sind, kennt auch nicht jeder die richtige Schreibweise, bei einer Liste ist das einfacher als bei der Freitextsuche.


    Den "Gitarrist in Köln" findest Du so natürlich nicht, denn in der Instrumentendatei steht "Gitarre". Im Profiltext steht es ungenormt: mal steht da "er spielt Gitarre", mal "er ist Gitarrist", mal "er spielt unterschiedliche Zupfinstrumente" caipi.

  • Hallo zusammen,


    ich werde es mit der Auswahlliste machen. Ich lasse diese übliche Suche, wie sie auf fast allen Seiten zu finden ist gleich weg. Ich erstelle lieber eine ausführliche Suche. Ort/Plz, Instrument, ggf. Alter, Mobilität etc.


    Danke für eure Überzeugungsarbeit mit den Auswahlfeldern :-)


    Danke
    derDenis

  • Nabend,


    ich stoße irgendwie an meine Grenzen. Ich habe nun 3 Tabellen erstellt:


    profile (Informationen zum Musiker wie, PLZ, Ort, Alter, PKW etc.)
    portfolio (id, instrumentID, profileID, skill)
    instrument (instrumentID, instrument)


    mit


    SQL
    1. SELECT DISTINCT instrument.instrument, instrument.instrumentid
    2. FROM portfolio LEFT JOIN instrument ON instrument.instrumentid = portfolio.instrumentid
    3. ORDER BY instrument.instrument


    habe ich alle von Musikern genutzen Instrumente gefiltert. Damit erstelle ich die Auswahlbox der Instrumente.


    Mein Formular enthält nun die Auswahlbox der vorhandenen Instrumente und je ein Feld für PLZ und ORT.


    Jetzt brauche ich ja eine Afrage, die alles miteinander verbindet :-(


    Nur wie...


    Kann mir da jemand auf die Sprünge helfen?


    Grüße
    derDenis

  • Einfach mit einem weiteren JOIN auf die "profile"-Tabelle über portfolio.profileID. Du musst ggf deine Query von oben etwas umstrukturieren. Überlege einfach mal, was du an Informationen hast und welche die haben möchtest. Das hilft.

    [FONT="Courier New"]...zur Zeit außer Betrieb...

  • Ich verstehe das nicht mit dem JOIN. Habe ja vorher alles mit WHERE gemacht.


    Außerdem habe ich meine tabellen umstrukturiert.


    Es gibt nun eine Artist Tabelle, eine Instruments Tabelle und eine ArtistInstruments Tabelle. Die letztere verbindet also beide Tabellen.


    Ich möchte nun alle Instrumente den Artists anzeigen.


    SELECT Instruments.instrument, ArtistInstruments.instrumentid, ArtistInstruments.artistid
    FROM Instruments, ArtistInstruments
    WHERE Instruments.instrumentid = ArtistInstruments.instrumentid AND ArtistInstruments.artistid = ID


    wie geht das denn mit JOIN ?

  • Es geht so,
    das sind ja immer so einfache Beispiele. Dann leuchtet das immer ein.


    Problem ist halt. Ich möchte 5-6 Tabellen in Relation zu dem Benutzerprofil bringen.


    Ich habe Tabellen wie, Bundesland, Musikrichtung, Instrumente etc.


    Und in dem Benutzerprofil werden nur die Fremdschlüssel gespeichert. Mit Außnahme Musikrichtung und Instrumente, da hier mehrfachnennungen möglich sind, habe ich eine Zwischentabelle angelegt, die sowohl die BenutzerID als auch die InstrumentID behinhalten.


    Die Ausgabe an sich ist nicht so schwierig.


    https://www.ssl-id.de/ichbinmusiker.de/artist.php?pID=1


    Ich möchte halt auch eine Suchseite einrichten, wo man dann unter all den Kriterien suchen kann.


    Und ich dachte, vielleicht kann man nochmal so eine Zwischentabelle anlegen, nur zum suchen.


    Vielleicht drück ich mich auch kompliziert aus.


    Grüße
    Der Denis

  • Vielleicht drück ich mich auch kompliziert aus.


    Nicht kompliziert, eher falsch, denn:


    SELECT Instruments.instrument, ArtistInstruments.instrumentid, ArtistInstruments.artistid
    FROM Instruments, ArtistInstruments
    WHERE Instruments.instrumentid = ArtistInstruments.instrumentid AND ArtistInstruments.artistid = ID


    wie geht das denn mit JOIN ?


    und

    Es geht so,
    das sind ja immer so einfache Beispiele. Dann leuchtet das immer ein.


    Problem ist halt. Ich möchte 5-6 Tabellen in Relation zu dem Benutzerprofil bringen.


    passen nicht zusammen. Sorry, für die Korinthenkackerei, aber wie soll man Dir denn helfen, wenn man nicht weiß, was Du willst? ;)

    Grüße vom Griechen,
    Cybergreek!

  • Sorry, ich versteh das einfach nicht, ich lese und lese und raffe nix.


    Ich habe 5 Tabellen.


    profile -> dort werden alle wichtigen daten zum Musiker gespeichert.
    instrumente -> hier werden alle instrumente gespeichert.
    genre -> hier werden alle Musikrichtungen gepeichert.
    profileInstrumente -> hier werden alle Instrumente gespeichert die ein Musiker spielt (Fremdschlüssel)
    profileGenre -> hier werdenalle Musikrichtungen des Musikers per Fremdschlüssel gespeichert.


    Jetzt hätte ich gerne eine Abfrage, die alles auf einmal ausgbit.


    Musiker 1
    Spielt: Gitarre, Bass, Schlagzeug
    Mag: Rock, Pop, Metal
    Wohnort: Köln
    PLZ: 50737
    Alter: 38 Jahre
    Geschlecht: männlich


    usw.


    Ich bekomme halt INSRUMENTE und GENRE raus. Ich habe ja so eine Zwischentabelle.


    Quasi, gib alles aus, was Du zu dem Musiker findest. In einer Abfrage :-)


    Grüße
    DerDenis

  • Also, ich habe jetzt mal diese Navicat zur Hilfe genommen und komme zu folgender Abfrage.



    Sieht auch schon recht gut aus (siehe Anhang). Problem ist jetzt nur, das er mir für jedes Instrument und jedes Genre eine neue Zeile ausgibt, obwohl es das selbe Profil ist.


    Ich möchte es aber so angezeigt bekommen :-)


    Tommy Lee - 10655 - Berlin - Rock, HipHop - Bass, Gitarre


    Ist das möglich?

    Einmal editiert, zuletzt von DenisCGN () aus folgendem Grund: erneuter Versuch :-)