Alle Datensätze ändern wo ein bestimtmes Zeichen vorkommt
phil
- php
Hallo.
Ich habe ca. 400 Datensätze.
Ich möchte, das überall wo im Datensatz ein "_" vorkommt, durch ein " " ersetzt wird. Das brauch ich da meine Suchmaschiene die Wörter sonst nicht findet.
Wie mache ich das am besten?
Ich muss doch theoretisch:
1.) Alle Datensätze auslesen.
2.) jeden durchsuchen nach einem "_"
3.) diese dann ersetzen durch ein " "
4.) Die Datensätze alle updaten.
Aber vorsicht. Nicht alle haben ein "_" im Datensatz.
Von ca 400, haben ca 320 ein oder mehrere "_" im Datensatz. Das soll geändert werden.
Danke im Vorraus.
mfg
Phil
Hallo Phil,
hast Du Deine Datensätze in einem Array? Wen nicht packe sie in eins, sollte beim einlesen auch das logischte sein. Dann kannst Du mit regullären Ausdrücken die Ersetzung vornehmen, sofern diese nötig ist.
Dann:
for ($i=0;$i<$datensaetze;$i++) {
if (preg_mtach("/_/",$datensaetze[$i])) {
// Der Unterstrich kommt vor, also ersetzten
$datensaetze[$i] = preg_replace("/_/"," ",$datensaetze[$i]);
// ersetzt Unterstrich durch Leerzeichen
}
}
Greetz
Sasha
Hi
for ($i=0;$i<$datensaetze;$i++) {
if (preg_mtach("/_/",$datensaetze[$i])) {
^^
if (preg_match("/_/",$datensaetze[$i])) {
// Der Unterstrich kommt vor, also ersetzten
$datensaetze[$i] = preg_replace("/_/"," ",$datensaetze[$i]);
// ersetzt Unterstrich durch Leerzeichen
}
}
mfg
Genie
Hallo Philipp,
Ich habe ca. 400 Datensätze.
das ist nicht besonders viel.
Ich möchte, das überall wo im Datensatz ein "_" vorkommt, durch ein " " ersetzt wird. Das brauch ich da meine Suchmaschiene die Wörter sonst nicht findet.
Das ist, wie ich finde, gar keine gute Idee. Du solltest meiner Meinung nach nicht die Daten ändern, die gespeichert wurden (es sei denn es sind eh' unwichtige und uninteressante Informationen, die ruhig verloren gehen können). Du solltest besser Deine Suchmaschine so anpassen, dass sie mit dem Unterstrich zurecht kommt.
Wenn Du es dennoch machen willst, dann ist das folgende weder theoretisch noch praktisch der beste Weg.
Wie mache ich das am besten?
Ich muss doch theoretisch:
1.) Alle Datensätze auslesen.
Nein.
2.) jeden durchsuchen nach einem "_"
Nein.
3.) diese dann ersetzen durch ein " "
Nein.
4.) Die Datensätze alle updaten.
Nein.
Nicht in der Reihenfolge - und auch nicht alles.
Aber vorsicht. Nicht alle haben ein "_" im Datensatz.
Ja, das haben wohl alle verstanden, Die Dein Posting gelesen haben.
Von ca 400, haben ca 320 ein oder mehrere "_" im Datensatz. Das soll geändert werden.
Du möchtest also die Datensätze ändern, die einen Unterstrich enthalten.
Du möchtest den Unterstrich durch ein Leerzeichen ersetzen.
Konsultiere die Dokumentation Deines Datenbankmanagementsystems (DBMS) nach den entsprechenden Zeichenkettenfunktionen, die es bereit stellt.
Was Dein Problem mit PHP zu tun hat, will mir beim besten Willen nicht einleuchten. Du suchst doch eher eine SQL-Anweisung, die das erledigt, was Du vorhast.
UPDATE tabelle
SET feld = neuer_wert(feld) -- hier wende Stringfunktionen an.
WHERE (feld enthält Unterstrich) -- Nutze entsprechende Funktionen Deines DBMS
Diese möchtest Du mit einem x-beliebigen Client Deines DBMS genau einmal ausführen. Du solltest in Zukunft darauf achten, keine Unterstriche mehr in der Datenbank abzuspeichern. Ok, da haben wir vermutlich die Verbindung zu PHP, da Deine Anwendung vermutlich in dieser Sprache geschrieben ist.
Ich wiederhole jedoch erneut: Ich halte das nicht für eine gute Idee. Verbessere Deine Suchmaschine; das erscheint mir sinnvoller.
Freundliche Grüße
Vinzenz
Ich wiederhole jedoch erneut: Ich halte das nicht für eine gute Idee. Verbessere Deine Suchmaschine; das erscheint mir sinnvoller.
Hatte ich auch zuerst vor.
Aber ich weiß beim besten Willen nicht wie!!!
mfg
Phil Z.
Hallo Philipp,
Ich wiederhole jedoch erneut: Ich halte das nicht für eine gute Idee. Verbessere Deine Suchmaschine; das erscheint mir sinnvoller.
Hatte ich auch zuerst vor.
Aber ich weiß beim besten Willen nicht wie!!!
ohne Kenntnis Deines bisherigen Ansatzes kann man Dir dabei nicht weiterhelfen.
Bitte erläutere Deinen bisherigen Ansatz - und woran Deine Lösung scheitert.
@haxor, siehe https://forum.selfhtml.org/?t=144574&m=938075:
a) hättest Du Dich gerne hier an dieser Diskussion beteiligen können.
So hättest Du vermieden, doch einen neuen Thread aufzumachen :-)
b) Könntest Du schreiben, welches Problem Du genau hast
- Aktualisieren einer Menge von Datensätzen mit Zeichenkettenfunktionen
- Nichtfinden von Daten mit Unterstrich
Freundliche Grüße
Vinzenz
- Aktualisieren einer Menge von Datensätzen mit Zeichenkettenfunktionen
Das ist eigendl. nur nebensache. Die Suchmaschiene anzupassen udn zu verbessern ist ein sinnvollerer Vorschlag. Danke!
b) Könntest Du schreiben, welches Problem Du genau hast
Ich will alle Einträge finden wo eine bestimmte Zeichenkette Der Suchbegriff) drin vorkommt.
- Nichtfinden von Daten mit Unterstrich
Hab schon überlegt als Ansatz:
SELECT satz FROM tabelle WHERE spalte = STRINGFUNKTIONdurchsuchestring(SUCHBEGRIFF)
So müsste praktisch alles gefunden werden egal ob sie nun getrennt sind oder nicht..
Aber wie heißt diese Stringfunktion!? Bzw. gibt es so eine überhaupt. Hab schon im Referenzbuch nachgeguckt aber nicht das richtige gefunden.
mfg
Phil Z.
Hallo,
SELECT satz FROM tabelle WHERE spalte = STRINGFUNKTIONdurchsuchestring(SUCHBEGRIFF)
Aber wie heißt diese Stringfunktion!? Bzw. gibt es so eine überhaupt. Hab schon im Referenzbuch nachgeguckt aber nicht das richtige gefunden.
Einerseits gibt es immerhin in fast allen Datenbanksystemen, die mit SQL arbeiten, die LIKE-Klausel.
Andererseits bieten Systeme wie z.B. mySQL String-Funktionen wie z.B. REPLACE() zum ersetzen von Teil-Strings, oder INSTR() zum finden fon Zeichenketten in strings an. Aber wie gesagt, das alles ist nur wirklich dann zu beantworten, wenn wir das verwendete Datenbanksystem kennen.
Grüße
Klaus
Einerseits gibt es immerhin in fast allen Datenbanksystemen, die mit SQL arbeiten, die LIKE-Klausel.
Die will ich aber nicht verwenden in dem Fall.
Andererseits bieten Systeme wie z.B. mySQL String-Funktionen wie z.B. REPLACE() zum ersetzen von Teil-Strings, oder INSTR() zum finden fon Zeichenketten in strings an. Aber wie gesagt, das alles ist nur wirklich dann zu beantworten, wenn wir das verwendete Datenbanksystem kennen.
Danke. Hab mir die Doku angeschaut. Ich werde aber nicht ganz klug daraus wie ich INSTR(str,substr) anwenden soll.
Könnte ich
SELECT satz FROM tabelle WHERE spalte = INSTR(SPALTE, suchbegriff)
machen oder wie? was soll als str also als string angegeben werden.
Und was REPLACE() angeht...
SELECT WHERE
INSTR(SPALTE, "_" )
REPLACE(spalte,"_"," ")
Hmm so scheint es nicht ganz richtig zu sein oder?
Bitte um schnelle Hilfe.
Danke im Vorraus.
Phil
hi,
das dir keiner Antwortet liegt wahrscheinlich an deiner mangelnden Bereitschaft dich mit der Materie auseinander zu setzen...aber die Lösung ist so banal, das ich sie dir gerne kundtue:
SELECT WHERE
INSTR(SPALTE, "_" )
REPLACE(spalte,"_"," ")
öhm - knapp daneben ;-)
update tabellenname
set spalte = replace(spalte,"_"," ")
viel spass noch und bevor ichs vergesse - selbstverständlich bin ich auch der Meinung das du die Suchfunktion anpassen solltest. Das Ersetzen des "_" beim Einfügen halte ich auch nicht für klug...(wenn den jemand eingibt wir er doch einen Grund dafür haben oder?)...und auch nicht für notwendig!
Gruss,
Seppel
Hi.
das dir keiner Antwortet liegt wahrscheinlich an deiner mangelnden Bereitschaft dich mit der Materie auseinander zu setzen...aber die Lösung ist so banal, das ich sie dir gerne kundtue:
Doch das hab ich aber ich checks nicht wie ich die Suchmaschiene ändern muss.
update tabellenname
set spalte = replace(spalte,"_"," ")
Super danke. Geht auch irgendiwe folgendes?:
Über all wo
wort-wort
steht soll nun
wort - wort stehn
also das vor und nach einem "-" immer in leerzeichen stehn muss?
> viel spass noch und bevor ichs vergesse - selbstverständlich bin ich auch der Meinung das du die Suchfunktion anpassen solltest.
das will ich auch aber ich weiß immer noch nicht wie.
Grüße.
Phil Z.
PS:@haxor lass mal gut sein anscheinend hast du bisher nicht viel mit dem Forum zu tun sonst würdest du nicht so posten. (musste ich auch erstmal lernen am Anfang) obwohl ich dir Recht gebe. Ich habe lange darauf gewartet das jmd. weiterhilft..
replace("hi","dOh")
Doch das hab ich aber ich checks nicht wie ich die Suchmaschiene ändern muss.
Lüga ;-)
1. wenn du dich damit beschäftigt hättest würdest du (vorallem nachdem Vince die Überschrift in UPDATE geändert hat) wissen, das man Daten nicht mit select ändert...
2. poste doch einfach mal deine Suchfunktion
3. oje, keine Ahnung...aber NEIN - du hast dich und wirst dich anscheinend mit SQL oder ähnlichem nicht auseinander setzen...sonst könntest du ggf. hierraus
update tabellenname
set spalte = replace(spalte,"_"," ")
das hier ableiten
~~~sql
update tabellenname
set spalte = replace(spalte,"-"," - ")
fairer weise sollte man an dieser Stelle erwähnen, dass es dem Update-Befehl in diesem Moment egal ist ob ein Wort/eine Zahl oder sonst was vor und hinter dem Bindestrich steht...also "do what you want, but think about the omen"
4. wenn du gleich wissen willst wie man ";" durch ein "," ersetzt werde ich nicht mehr antworten ;-)
Super danke.
Gerne...aber das hättest du alles auch selbst rausfinden können.
PS:@haxor lass mal gut sein anscheinend hast du bisher nicht viel mit dem Forum zu tun sonst würdest du nicht so posten. (musste ich auch erstmal lernen am Anfang) obwohl ich dir Recht gebe. Ich habe lange darauf gewartet das jmd. weiterhilft..
führst du hier Selbstgespräche oder gibt es wirklich jemanden der auch von böswilligen Sonderzeichen heimgesucht wird *fg*
Seppel
wenn du dich damit beschäftigt hättest würdest du (vorallem nachdem Vince die Überschrift in UPDATE geändert hat) wissen, das man Daten nicht mit select ändert...
poste doch einfach mal deine Suchfunktion
Habe ich bereits. Mache ich aber gerne nochmal.
- oje, keine Ahnung...aber NEIN - du hast dich und wirst dich anscheinend mit SQL oder ähnlichem nicht auseinander setzen...sonst könntest du ggf. hierraus
fairer weise sollte man an dieser Stelle erwähnen, dass es dem Update-Befehl in diesem Moment egal ist ob ein Wort/eine Zahl oder sonst was vor und hinter dem Bindestrich steht...also "do what you want, but think about the omen"
und genau das war der punkt mir war schon klar das ich das so machen könnte ich will aber das
"wort - wort"
so bleibtnur
"wort-wor"
soll sich ändern in
"wort - wort"
- wenn du gleich wissen willst wie man ";" durch ein "," ersetzt werde ich nicht mehr antworten ;-)
Brauchst ud nciht.
führst du hier Selbstgespräche oder gibt es wirklich jemanden der auch von böswilligen Sonderzeichen heimgesucht wird *fg*
Wer Haxor ist weiß ich nicht. Ich kenn den Menschen nicht.
Hier meien bisherige Suchfunktion:
------------------------------------
<?php
if(isset($_POST['Search'])){
include("sql.php");
$searcht=$_POST['searcht'];
$searcht = ltrim($searcht);
$searcht = rtrim($searcht);
$u="SELECT * FROM ddl_album WHERE MATCH (name) AGAINST ('$searcht' WITH QUERY EXPANSION)";
$result=mysql_query($u) or die(mysql_error());
if(mysql_num_rows($result)) {
while($row = mysql_fetch_assoc($result)){
$row['name'];
$row['adresse'];
$row['pw'];
echo "
<tr><td class='link'>
<a href='".$row['adresse']."' target='_blank'>"
.$row['name']."</td><td class='pw'>".$row['pw']."</td></tr>";
}
}
}
?>
Danke..
Phil
Hey.
Könnte mir bitte noch jemand weiterhelfen?!
Danke.
mfg
Phil
Hey.
Könnte mir bitte noch jemand weiterhelfen?!
Danke.
mfg
Phil
dito! :(
Hallo Philipp,
wie wäre es mit ein paar Beispieldaten zu Deinem Statement?
SELECT * FROM ddl_album WHERE MATCH (name) AGAINST ('$searcht' WITH QUERY EXPANSION
- ein paar Beispieldatensätze
- ein oder zwei Sucheingaben
- das von Dir gewünschte Ergebnis
(mit Begründung, warum dies das gewünschte Ergebnis ist)
- das Dir gelieferte Ergebnis
Freundliche Grüße
Vinzenz
Hallo Vinzenz,
SELECT * FROM tabekke WHERE MATCH (name) AGAINST ('$searcht' WITH QUERY EXPANSION
- ein paar Beispieldatensätze
ID NAME
0 das wetter ist schön
1 das_wetterPODist der!=doofe
2 das-WetTer
3 der iPod zickt rumm
4 Wettermeister auf Tour
- ein oder zwei Sucheingaben
Eingaben:
1. das
2. das wetter
3. wetter
4. der
- das von Dir gewünschte Ergebnis
(mit Begründung, warum dies das gewünschte Ergebnis ist)
zu 1.: Name von ID: 0,1,2
zu 2.: Name von ID: 0,1,2
zu 3.: Name von ID: 0,1,2,4
zu 4.: Name von ID: 1,3
Überall wo die Zeichenkette eines Datensatzes, eines der in der Suche eingegebenen Wörter beinhaltet, wurde der Name der ID ausgegeben.
- das Dir gelieferte Ergebnis
zu 1.: Name von ID: 0
zu 2.: Name von ID: 0
zu 3.: Name von ID: 0
zu 4.: Name von ID: 3
Ich hoffe das ist verständlich genug.
Danke für die weitere Hilfe.
Mit freundlichen Grüßen
Phil Z.
Hallo Philipp,
SELECT * FROM tabekke WHERE MATCH (name) AGAINST ('$searcht' WITH QUERY EXPANSION
Du solltest Dir das relevante Handbuchkapitel durchlesen.
- Stopwörter
- Mindestlänge (hast Du offensichtlich getunt)
- Relevanz
- warum WITH QUERY EXPANSION?
- ein oder zwei Sucheingaben
Eingaben:
- das -- schlechtes Suchwort, Effekt ist beschrieben
- das wetter -- was macht "WITH QUERY EXPANSION"?
- wetter -- tja, das ist beschrieben
- der -- Glückssache
Hmm, meine Lieblingsfrage habe ich bisher ganz vergessen:
Welche MySQL-Version ist im Einsatz?
Freundliche Grüße
Vinzenz, der trotz vieler Drängelpostings die Hoffnung noch nicht aufgibt.
Hallo Vinzenz,
Du solltest Dir das relevante Handbuchkapitel durchlesen.
Hab ich bereits, mach ich aber trotzdem noch ein paar mal.
- Stopwörter
- Mindestlänge (hast Du offensichtlich getunt)
- Relevanz
- warum WITH QUERY EXPANSION?
Mehr Ergebnisse die ähnlich sind.
Hmm, meine Lieblingsfrage habe ich bisher ganz vergessen:
Welche MySQL-Version ist im Einsatz?
MySQL 5.0.27
Freundliche Grüße
dito!
Vinzenz, der trotz vieler Drängelpostings die Hoffnung noch nicht aufgibt.
Danke das du mir noch hilfst.
mfg
Phil
Hi,
also was ich vllt. als erstes machen sollte wäre die Boolsche Suche verwenden und Die Quelldistribution installieren, damit ich die Werte ft_min_word_len und ft_max_word_len ändern kann.
Allerdings ist das nicht möglich da ich einen Freehoster benutze die sowas bzw solchen Support/Update/Upgrade nicht unterstützen.
Aber ich bleib auch immer noch an der Stelle hengen: Welche stringfunktion ich da einbauen soll.
mfg
Phil Z.
Bekomm ich hier noch Hilfe oder wie sieht das aus?
Bitte.. Ich warte seit Tagen.
mfg
Phil Z.
Hallo Philipp,
also was ich vllt. als erstes machen sollte wäre die Boolsche Suche verwenden
ja, das wäre schon mal eine Idee :-)
und Die Quelldistribution installieren, damit ich die Werte ft_min_word_len und ft_max_word_len ändern kann.
Allerdings ist das nicht möglich da ich einen Freehoster benutze die sowas bzw solchen Support/Update/Upgrade nicht unterstützen.
was bedeutet, dass Du diese Werte nicht einstellen kannst und mit den gegebenen Beschränkungen der Volltextsuche leben mußt. Hast Du verstanden, warum es diese Beschränkungen gibt?
Freundliche Grüße
Vinzenz
Hi,
ja, das wäre schon mal eine Idee :-)
okay, dann werde ich das tun.
was bedeutet, dass Du diese Werte nicht einstellen kannst und mit den gegebenen Beschränkungen der Volltextsuche leben mußt. Hast Du verstanden, warum es diese Beschränkungen gibt?
Ja ich denke schon.
Wie kann ich denn jetzt "machen" das man auch sowas wie
_wetter_12s
findet bei der eingabe von "wetter"?
mfg
Phil Z.
Hi nochmal ;-)
hast deine Frage ja immernoch offen...
Wie kann ich denn jetzt "machen" das man auch sowas wie
_wetter_12s
findet bei der eingabe von "wetter"?
mal die anderen Postings aussen vor gelassen könntest du das doch einfach mit: "select * from T where S like '%wetter%'
" finden.
Ansonsten zu deinem Bsp von oben:
das_wetter
das wetter
das-wetter
alle findest du mit "das wetter", wenn du das Suchwort aufteilst. Soll heissen z.B. so (Befehle musst du dir natürlich in deiner Progsprache besorgen und umschreiben):
myArray = Split(Suchwort," ")
For i=0 To Ubound(myArray)
myRestriction = myRestriction & " and S like '%" & myArray(i) & "'"
Next
mySQL = "select * from T where 1=1" & myRestriction
Sollte doch ohne Probleme alles finden oder?
Gruss,
Seppel
Na klar hab ich auch schon geschrieben! Es ist MySQL.
Nur wie wende ich die Stringfunktion richtig an?
mfg
Phil
Sorry.
Aber hier postet schon wieder keiner.+
mfg
Haxor
hehe,
grade erst deinen Hilfe-Schrei von heute gesehen...wirst du von heimtückischen Unterstrichen angegriffen, die nebst unverschämter Blockade "eurer" Suchmaschinen auch noch die Existenz "eurer" Tabellen und Leben bedroht?
lustig ;-)
Gruss,
Seppel