ostpower Geschrieben 25. November 2009 Teilen Geschrieben 25. November 2009 Hallo zusammen, ich habe folgendes Problem: Also zunächst mal ein Beispiel aus der tabelle, sonst ist das Problem schwer zu erklären: Produktnummer____Eintragsnr____Text 123 _____________ 00 __________ 548784 dsjhdjsh dhsjdhsj 123 _____________ 01 __________ <notiz> 123 _____________ 02 __________ test 123 _____________ 03 __________ </notiz> 145 _____________ 00 __________ 879897 shdghsjds 145 _____________ 01 __________ <notiz> 145 _____________ 02 __________ blubb 145 _____________ 03 __________ </notiz> 145 _____________ 04 __________ dshdjshjdhsj So jetzt fragt bitte nicht warum die Tabelle so aufgebaut ist^^ Ich möchte daraus die Produktnummer, die Nummer aus dem Text sowie den Text der von <notiz> und </notiz> eingeschlossen ist. Also die Ausgabe soll dann so aussehen: Produktnummer____Mitarbeiter_____Notiz 123 _____________ 548784 _______ test 145 _____________ 879897 _______ blubb Habt ihr ne idee wie ich ein entsprechenden select basteln könnte? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schmarrer Geschrieben 25. November 2009 Teilen Geschrieben 25. November 2009 Hi, ich frag also jetzt nicht warum die Tabelle so dermaßen "unvorteilhaft" aufgebaut ist. Dennoch hier vllt ein - wenn auch ein sicherlich sehr sehr suboptimaler und langsamer - Ansatz auf die Schnelle... select distinct a.Produktnummer, (select text from TABELLE b where a.Produktnummer = b.Produktnummer and b.Eintragsnr = '00'), (select text from TABELLE b where a.Produktnummer = b.Produktnummer and Eintragsnr = '02') from TABELLE a where a.Produktnummer in (select distinct Produktnummer from TABELLE); Wie gesagt, ich würde so ein Statement nirgends einbauen... Lieber das Datenbankmodell gerade ziehen! Und ob das natürlich auf alle deine Daten zutrifft kann ich auch nicht sagen. Probiers einfach. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ostpower Geschrieben 25. November 2009 Autor Teilen Geschrieben 25. November 2009 Also was noch ein Problem ist. Die Notiz muss nicht immer die Eintragsnr 02 haben. Da können auch noch mehr zeilen mit etwas anderem stehen. Das müsste man also irgendwie dynamisch machen, hab schon an etwas gedacht, dass man nach <notiz> sucht, sich die passende eintragsnr sucht und 1 addiert, aber keine ahnung wie ich das implementieren soll Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_n4p_ Geschrieben 25. November 2009 Teilen Geschrieben 25. November 2009 mit ner funktion die genau das tut? SELECT Eintragsnr FROM tbl WHERE Text = '<notiz>' AND Produktnummer = inPnr INTO variable Produktnummer als parameter für die funktion und variable zurückgeben. mich würde allerdings schon interessieren warum dieser mist in ner tabelle steht. und sag jetzt nich isso, die daten müssen ja irgendwo her kommen. da kannst es auch gleich als LOB speichern ... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ostpower Geschrieben 26. November 2009 Autor Teilen Geschrieben 26. November 2009 Da hängen zich Webforms dran, und diese Inhalte werden dann dynmisch zusammengebastelt. Da besteht sicherlich noch Verbesserungbedarf... Aber zu deinem Lösungsvorschlag: Kannst du das noch etwas klarer erklären? Was meinst du mit "Produktnummer = inPnr" bzw. mit "inPnr"? Und dann sagst du dass die produknummer als variable an die funktion übergeben wird? du meinst die eintragsnummer oder? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_n4p_ Geschrieben 26. November 2009 Teilen Geschrieben 26. November 2009 nein, du willst die eintragsnummer ja geliefert bekommen. inPnr is ne variable. wie das genau aussehen sollte, sollte die doku zu deinem DBMS erläutern, welches überhaupt? verbesserungsbedarf ist ziemlich euphemistisch. relationen zwischen daten (text) und eindeutiger identifikation der zeile ist nicht vorhanden. wenn du daten unstrukturiert irgendwo ablegen willst, kannst du auch ne txt datei nehmen. allein der umstand das hinter der mitarbeiternummer, oder was das is, noch text im gleichen feld steht, sollte klarmachen, das da was nich stimmt. man denkt doch zuerst darüber nach wie man die daten sinnvoll ablegt und schreibt dann das programm "drumrum". so wie es jetzt is wäre es noch am sinnvollsten alles per group_concat in ein string zu hauen und dann programmseitig das ganze per regexp zu zerlegen. und da sind wir wieder an dem punkt: wozu ne tabelle? ein ernstgemeinter rat, bevor du versuchst aus der aktuellen tabelle daten strukturiert und sinnvoll zu bekommen, ändere die schreibende anwendung und das tabellen-schema, denn das wird nicht das letzte problem mit dieser oder gar diesen tabellen bleiben. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
RipperFox Geschrieben 26. November 2009 Teilen Geschrieben 26. November 2009 Produktnummer____Eintragsnr____Text 123 _____________ 00 __________ 548784 dsjhdjsh dhsjdhsj 123 _____________ 01 __________ <notiz> So jetzt fragt bitte nicht warum die Tabelle so aufgebaut ist^^ Da gibt's keinerlei Erklärungsbedarf - man sieht's.. Man könnte ein ultralahme Abfrage mit self-join basteln. Aber das WILLST Du nicht - das wird so lahm wie ein totes Pferd. Du willst folgendes: Tabelle Notizen: id_____Mitarbeiter_____Text 1 548784 Foo 2 3141 Bar Tabelle ProduktNotizen: Produkt_____Notiz 123 1 123 2 Tabelle Mitarbeiter: id_____Name 548784 HansWurst 3141 PeterPeterson Bei einer relationalen Datenbank (schlag die genaue Bedeutung von "relational" in diesem Zusammenhang nach, ernsthaft!) will man mindestens zu einem gewissen Grad normalisieren. Die von dir genannte "Tabelle" ist wirklich kompletter Mist.. - das könntest Du als View noch ausgeben, so dass du nix ändern musst an dem anderen Mist der da schon dranhängt, aber grundsätzlich ist und bleibt das großer Mist. Lieber einmal Zähne zusammenbeissen und gleich ordentlich machen als da in Jahren noch drunter leiden müssen! Grüße Ripper Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Reinhold Geschrieben 26. November 2009 Teilen Geschrieben 26. November 2009 Lieber einmal Zähne zusammenbeissen und gleich ordentlich machen als da in Jahren noch drunter leiden müssen! Das hängt aber wohl davon ab, wie bzw. von welchem Programm diese Tabelle gefüllt wird. Wenn das eine Altlast ist, positiv ausgedrückt ein historisch gewachsenes System *gg*, kannst du ja nicht einfach die Datenbank neu modellieren, oder? Und solange wir darüber keine Informationen haben, halte ich deine Aussage für recht gewagt... Reinhold BTW: Über eine Lösung für das Problem habe ich nicht wirklich nachgedacht, mit einem einzigen SQL-Statement wird das schwer. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.