Zum Inhalt springen

Bestimmte Tabellenzeile auslesen


ostpower

Empfohlene Beiträge

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :rolleyes: - 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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...