Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeichenanzahl im String
Hallo ihr!
Kennt jemand eine Funktion in mysql, mit der man bestimmte Zeichen in einem String zählen kann? :rolleyes:
Beispiel:
1-3-7-12-98
Rauskommen muß 4.
Danke schonmal.
Gruß oms
Rauskommen muß 4.
ich gehe mal von der suche nach '-' aus.... :)
hatte heute mal ein wenig gesucht, aber auch nichts gefunden. :(
habe aber mal noch einen kumpel gefragt, wenn ich/DU glück habe/HAST, sollte ich morgen eine antwort haben.... :)
ansonsten hätte ich schon mal einen alternativvorschlag, wenn es über die DB nicht direkt gehen sollte.
lies das ganze feld ein und counte die vorkommensanzahl mit hilfe von php.
ist zwar nicht schön, aber wohl die letzte möglichkeit, wenn es nicht in der DB funktionieren sollte.
hier schon mal ein paar links
http://de.php.net/manual/de/function.count-chars.php
http://de.php.net/manual/de/function.explode.php
$array = explode ("-", $deinstring);
nach dem explode hat man mit count($array)-1 die anzahl der zeichen.
das hier müsste aber der ideale weg (ohne DB) sein
http://de.php.net/manual/de/function.substr-count.php
Ja, ich meinte die "-", sorry. :D
Mit PHP, klar, kein Problem. Ich bin hier bloß gerade beim Code optimieren und wollte die DB möglichst viel, wenn nicht sogar alles machen lassen.
Wäre cool, wenn du die Variante mit MySQL rausbekommen würdest.:grin:
Geht da nicht irgendwas mit MATCH etc. ?
Gruß oms
ja. da bin ich auch drübergestolpert gewesen. der liefert dir nur nicht die anzahl. :( wäre ja zu einfach gewesen .... :D
MATCH (col1,col2,...) AGAINST (expr)
MATCH (col1,col2,...) AGAINST (expr IN BOOLEAN MODE)
MATCH ... AGAINST() is used for full-text search and returns relevance - similarity measure between the text in columns (col1,col2,...) and the query expr. Relevance is a positive floating-point number. Zero relevance means no similarity. MATCH ... AGAINST() is available in MySQL version 3.23.23 or later. IN BOOLEAN MODE extension was added in version 4.0.1. For details and usage examples, see section 6.8 MySQL Full-text Search.
er zeigt dir nur das vorkommen an. mehr leider nciht.
http://www.mysql.com/doc/en/Fulltext_Search.html
die antwortmail ist übrigens da. ist aber nicht gerade sehr vielversprechend.... :(
hab leider keine gebrauchsfertige lösung parat...
http://www.mysql.com/doc/en/String_functions.html
oder
http://www.mysql.com/doc/en/String_comparison_functions.html
und dann vielleicht was mit REGEXP... viel Spass.
eigentlich schade, oder .... :(
@Abraxax
Danke für die Bemühungen.
Mit FIND_IN_SET könnte ich das hinbiegen. Muß ich halt nur die "-" durch "," ersetzen. Das müßte pfunzen, da mir die letzte Zahl im String zur Verfügung steht.
Aber so richtig glücklich bin ich damit auch nicht. :mad:
Laßt meinen Hoster bloß möglichst schnell auf MySQL >=4.0 updaten. Dann könnte ich endlich Unterabfragen benutzen und bräuchte nicht diese abgef**kte Variante wählen. Aber darauf kann ich wohl noch ein kleine Ewigkeit warten...http://www.smiley-smilies.de/azcrying.gif
oms
deine suche war ja bisher nach -
wenn du FIND_IN_SET nimmst, musst du ja die zahlen durch komma ersetzen, wenn ich das richtig verstanden habe, um auf die 4 zu kommen.
das ist es besitmmt auch nciht. oder?
Ob 5 oder 4 ist eigentlich egal, Hauptsache der String mit einem "," mehr bekommt ne höhere Zahl. Im Prinzip hab ich eine Zeichenkette bestehend aus Zahlen, die durch irgendein Zeichen getrennt werden. Gegeben ist mir immer die letzte Zahl. Ich brauche nur die Anzahl der Zahlen im String.
Müßte eigentlich klappen...
SELECT FIND_IN_SET("98","1,3,7,12,98"); #Beispiel von oben
erhofftes Resultat: 5
ok. mir war nicht bekannt, das du IMMER DIE LETZTE zahl kennst.
so müsste es klappen, aber nur, wenn dir wirklich die letzte zahl im SET bekannt ist...... ;)
Jo, es pfunzt. Jetzt kann ich endlich dieses blöde Menü fertigstellen. :p
thx@Abraxax
Gruß oms
also wer jetzt das nicht nur mit komma trennt, der kann auch diese variante in betracht ziehen:
select (length(spalte)-length(replace(spalte,'-',''))) as zeichenanzahl...
MelloPie 22-01-2003, 12:49 Also für das Problem ist doch find_in_set völlig falsch, viel zu viele prämissen.
Die Lösung von Campus erscheint viel logischer, nur eine prämisse: - wird nur als trennzeichen verwendet.
Aber die Zahlen im String können doch unterschiedlich viele Ziffern haben...
:goth:
Sorry, der Groschen ist eben reichlich spät gefallen. Nicht mein Tag heute. Die Methode ist super. *peinlich*
Danke
da muss ich oms beipflichten. die variante von campus ist wohl der idealste weg. :respekt:
und wieder was gelernt ... :rolleyes:
danke danke, meine schüler... :p
Original geschrieben von oms
@Abraxax
...
Laßt meinen Hoster bloß möglichst schnell auf MySQL >=4.0 updaten. Dann könnte ich endlich Unterabfragen benutzen und bräuchte nicht diese abgef**kte Variante wählen. Aber darauf kann ich wohl noch ein kleine Ewigkeit warten
...
oms
Da wirst Du wohl noch warten dürfen ... Unterfrage gibt es erst ab version 4.1 ... und die ist frühes Alpha (und das auch nur weil's vor Alpha nichts gibt) ... gibt offiziell nicht mal die Möglichkeit eines Downloads ... !
Da wirst Du wohl noch warten dürfen ... Unterfrage gibt es erst ab version 4.1 ...
...schlimm genug.
Aber ich habe irgendwann mal gelernt, daß man sehr viele subqueries alternativ auch mit joins darstellen kann. Weiß jemand, wo da die Grenzen sind? :huep:
MelloPie 22-01-2003, 15:06 @nicht zufrieden mit MySQL? Meistens sinds die, die davor sitzen.
@MelloPie: Bin mit MySQL mehr als zufrieden...
Bin bloß eben in letzter Zeit auf Abfrage-Probleme gestoßen, bei denen man die Grenzen von MySQL (oder eben die meines Verstandes) streift.
Mit joins ist ja nunmal nicht alles möglich.
oms
trekkie2003 16-09-2003, 20:38 Tach Leutz,
warum verringerst du bei dem Zählen des Arrays die Anzahl um eins...
Es kommt zwar das richtige Ergebniss raus aber ich habe nicht kapiert wieso...wäre net wenn mir jemand das erklären könnte!
tschau und thx
trekkie2003
|
|