Anzahl eines Zeichens in einem String ermitteln

Anzahl eines Zeichens in einem String ermitteln

am 12.07.2007 10:50:39 von Mathias Lipowski

Hallo NG!

Ist es in einer MySQL-Abfrage möglich, die Anzahl eines vorkommenden
Zeichens in einem String (in einer Spalte) zu ermitteln?
Wenn ja, welche Funktion oder welcher Aufruf tut das für mich?

Der Hintergrund:
Ich habe in einer Spalte Daten abgelegt, die von der Datenlänge her sehr
unterschiedlich sind und somit die einzelnen Daten durch ein spezielles
Zeichen (|) getrennt. Lässt sich nun ermitteln, wie oft das Zeichen |
vorhanden ist, dann kann ich damit auf die 'Datenlänge' des Inhalts
schließen.

Beispiele: 'mydata1|data2' oder 'data1|mydata2|data3|mydata4' ...


Wäre auch für eine andere Lösung dankbar, wie man solche Daten (variable
Anzahl von Einträgen) besser in einem Datensatz speichern und wieder
auslesen kann!

Vielen Dank für eure Hilfe!

Tschau, Mathias

Re: Anzahl eines Zeichens in einem String ermitteln

am 12.07.2007 11:00:28 von Michael Ziegler

Mathias Lipowski wrote:
> Wäre auch für eine andere Lösung dankbar, wie man solche Daten (variable
> Anzahl von Einträgen) besser in einem Datensatz speichern und wieder
> auslesen kann!

Dafür nimmt man ein normalisiertes Design, das zwei Tabellen benutzt.
Ich illustriere das mal am Beispiel von Kochrezepten:

1. Tabelle: Allgemeine Daten
Rezeptnummer, Bezeichnung, Serviervorschlag, Kochzeit etc

2. Tabelle: Zutaten
Rezeptnummer, Bezeichnung der Zutat, Menge

Du kannst damit jedem Rezept beliebig viele Zutaten geben. Über
Constraints (Stichwort referentielle Integrität) lässt du dann noch die
beiden Tabellen über die Rezeptnummern in Verbindung bringen, et voila :)

Um dann die Anzahl der Zutaten in einem Rezept zu zählen reicht:

| SELECT COUNT(*)
| FROM zutaten
| WHERE rezeptnummer = $Nummer


Du solltest dich allgemein mal mit Normalisierung von Designs und RI
beschäftigen.

--
Testscript für RegEchsen:
http://diesundas.funzt-halt.net/regextest.php

Re: Anzahl eines Zeichens in einem String ermitteln

am 12.07.2007 11:14:56 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: Anzahl eines Zeichens in einem String ermitteln

am 12.07.2007 11:15:40 von Christian Kirsch

Am 12.07.2007 10:50 schrieb Mathias Lipowski:
> Hallo NG!
>
> Ist es in einer MySQL-Abfrage möglich, die Anzahl eines vorkommenden
> Zeichens in einem String (in einer Spalte) zu ermitteln?
> Wenn ja, welche Funktion oder welcher Aufruf tut das für mich?
>
> Der Hintergrund:
> Ich habe in einer Spalte Daten abgelegt, die von der Datenlänge her sehr
> unterschiedlich sind und somit die einzelnen Daten durch ein spezielles
> Zeichen (|) getrennt. Lässt sich nun ermitteln, wie oft das Zeichen |
> vorhanden ist, dann kann ich damit auf die 'Datenlänge' des Inhalts
> schließen.
>
> Beispiele: 'mydata1|data2' oder 'data1|mydata2|data3|mydata4' ...
>

sowas spricht für einen Designfehler. Vermutlich möchtest Du sagen:
Dieser Datensatz hat die Attribute "mydata1" und "data2" bzw. "data1",
"mydata2", "data3" und "mydata4"?

Dann modelliere das auch so: Benutze eine separate Tabelle, die für
jede Kombination aus Datensatz und Attribut genau *eine* Zeile enthält.

Google: n:m-Relation.

>
> Wäre auch für eine andere Lösung dankbar, wie man solche Daten (variable
> Anzahl von Einträgen) besser in einem Datensatz speichern und wieder
> auslesen kann!

S. oben. Und: Lesen, lesen, lesen.
--
Christian

Re: Anzahl eines Zeichens in einem String ermitteln

am 12.07.2007 12:37:05 von Mathias Lipowski

Michael Ziegler schrieb:
> Mathias Lipowski wrote:
>> Wäre auch für eine andere Lösung dankbar, wie man solche Daten
>> (variable Anzahl von Einträgen) besser in einem Datensatz speichern
>> und wieder auslesen kann!
>
> Dafür nimmt man ein normalisiertes Design, das zwei Tabellen benutzt.
> Ich illustriere das mal am Beispiel von Kochrezepten:
>
> 1. Tabelle: Allgemeine Daten
> Rezeptnummer, Bezeichnung, Serviervorschlag, Kochzeit etc
>
> 2. Tabelle: Zutaten
> Rezeptnummer, Bezeichnung der Zutat, Menge
>
> Du kannst damit jedem Rezept beliebig viele Zutaten geben. Über
> Constraints (Stichwort referentielle Integrität) lässt du dann noch die
> beiden Tabellen über die Rezeptnummern in Verbindung bringen, et voila :)

Vielen Dank, der Hinweis mit der 2. Tabelle ist für meine Überlegungen
genau richtig. Das Vereinfacht das Auslesen um einiges und erspart mir
diese umständlichen MySQL-Abfragen!

> Du solltest dich allgemein mal mit Normalisierung von Designs und RI
> beschäftigen.

Werde ich tun! :-)

Vielen Dank!
Tschau, Mathias