![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Veteran
![]() |
![]() hi!
ich hätt da ein paar fragen zu sql, bin mir nicht sicher ob das mit sql überhaupt geht, drum frag ich lieber vorher nach :P 1. frage ok, also ich habe 2 tabellen, in der einen stehen personen-infos mit einem eindeutigen key. der key ist mit einer anderen tabelle verbunden in der eigenschaften der person als spalten aufgeführt sind. das heisst zu jeder person x in table 1 besteht genau 1 zeile in table 2. die werte sind einfache true/false flags. mir ist klar dass ich zu jeder person die ganzen werte ausgeben kann, aber kann ich z.b. nur alle spalten für eine person ausgeben in denen der wert 'true' ist?? geht das über die columns? 2. frage wenn ich die werte (spaltennamen in table2) kategorisieren möchte, hab ich mir überlegt eine dritte tabelle zu erstellen in der die kategorien hinterlegt sind, beispielsweise ich verknüpfe den spaltennamen Applikationsentwickler mit der kategorie IT-Ausbildung. Nun möchte ich bsp-weise für eine person alle fähigkeiten für diese kategorie auslesen, also nehme ich alle spaltennamen in der table 3 über eine id bsp und müsste dann die werte der spalten mit diesem namen aus table 2 auslesen.... ich weiss das es geht mit dynamic sql oder auch plsql. mit normalem sql geht das nicht oder? wäre dankbar für eine kurze antwort.. (kürzer als meine problembeschreibung) ![]() thx |
![]() |
![]() |
![]() |
#2 |
Inventar
![]() Registriert seit: 13.06.2001
Beiträge: 1.830
|
![]() ad 1.)
d.h. du hast sowas: -------- Tabelle1 -------- id|name 00|1.Name 01|2.Name 02|usw -------- Tabelle2 -------- id|a|b|c|d|e|f 00|0|1|0|1|0|0 01|1|1|0|0|0|1 usw. Oder ist es ganz anders? Wenn du das obige hast: Warum hast du's dann überhaupt in zwei verschiedenen Tabellen? AFAIK kannst du nicht nur Spalten anzeigen die true sind. Da du dir das Ergebniss deines Selects aber vermutlich nicht auf der Kommandozeile anschaust sondern irgendwie weiterverarbeitest, würd' ich das dann im Programm lösen. ad2.) AFAIK auch nicht, du könntest aber statt der dritten Tabelle mit den Kategorien einen VIEW anlegen. MySQL kann das aber noch nicht (für 5.1 geplant). Ansonsten siehe 1.) also erstmal alles abfragen und dann im Programm nur die entsprechenden Spalten anzeigen. Jak
____________________________________
Join the DNRC | Godwin\'s Law (thx@stona) Documentation is like sex: If it\'s good, it\'s very, very good. If it\'s bad, it\'s better than nothing. \"In theory, theory and practice are the same. In practice, they are not\" (Lawrence Berra) |
![]() |
![]() |
![]() |
#3 |
Veteran
![]() |
![]() hallo jak!
jo, genauso siehts aus, ich weiss schon, dass ich das alles in eine tabelle zusammenziehen kann. nur hab ich dann ein table mit 300 spalten ![]() hab mir schon gedacht, dass das nicht wirklich geht, naja ich werds wahrscheinlich eh nur für einfache selects und reports brauchen also krieg ich das schon hin. danke! |
![]() |
![]() |
![]() |
#4 |
Senior Member
![]() Registriert seit: 02.11.2002
Beiträge: 179
|
![]() wenn bei einer tabelle die daten in die breite gehen wie bei dir, und nicht in die tiefe (also x- statt y-achse), dann ist schlicht und einfach das datenbank-desing falsch.
soetwas kann man _immer_ auf der y-achse lösen. du kannst (= vereinfachtes beispiel) eine tabelle mit ID und skill machen (id: 1/skill: programmieren, id: 2/skill: office, ...) und sie mit einer n:n verknüpfung (über eine zwischentabelle mit personId -> skillId) verbinden. nie in die breite gehen wenn's - so wie bei dir - nicht notwendig ist. und: dann kannst du auch ganz einfach alle true-spalten anzeigen, musst nur in der n:n-tabelle nach personenId filtern und mit der skill-tabelle joinen - voilà!
____________________________________
It\'s not a bug... It\'s a feature! You know, the main advantage of encrypted paella over ordinary paella is that nobody but you knows what you are eating... (Alvaro) |
![]() |
![]() |
![]() |
#5 |
Veteran
![]() |
![]() danke für deinen comment
ich weiss selber dass das design falsch ist, ich hab selber genug mit dbs zu tun gehabt. nur muss ich in 2 tagen eine db über access erstellen, also mach ich ein schema wie du gesagt hast. ich hatte 3 tabellen, 1 mit person, zweite mit den skills pro person und die dritte mit angaben zum skill, sowie gruppierung der skills... nur muss ich das schema über access in formularen darstellen können und da ich mich mit diesem sche*** ned auskenne, hab ich 2 tage rumgewurschtelt und am schluss alles über den haufen geworfen, weil ich den formularzugriff auf mein ursprüngliches design ned hingekriegt hab (vielleicht mit der zeit, aber nicht innerhalb von 2 tagen) darum ist das falsche db-design rausgekommen, ned weil ich's nicht anders machen hätte können abr trotzdem danke für den beitrag |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|