PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : soundexWert in DB zum entsprechenden Eintrag


consch
16.09.2009, 02:30:13
Habe mir das hier (http://www.selfphp.de/funktionsreferenz/string_funktionen/soundex.php) mal angeschaut. Wenn ich jetzt Wörter in einer tabelle habe (in einer Spalte), in eine zweite Spalte den dazugehörigen soundexWert speichern?

Das müsste doch mit select ausgewählt werden und dann über eine Schleife die einzelnen Wörter mit soundex abfragen bzw. zuordnen. Danach jeweils ein insert, oder?

Aber wie sieht das im php Dokument aus. Habe bislang immer nur Werte aus der DB ausgelesen.

cortex
16.09.2009, 09:46:21
es war wohl schon etwas spät, als du den thread eröffnet hast... lies bitte noch einmal selbst den text und frage dich, ob der geneigte leser eine chance hat, dein anliegen zu verstehen.

cx

consch
16.09.2009, 14:48:47
Ehm, wie meinst Du das? Ich versuche es mal noch mal. *sorry*
Ich habe eine Tabelle in der es zwei Felder gibt (wort und soundexwert).
Feld "wort" ist bereits gefüllt, dort stehen einige Wörter drin.
Nun möchte ich ganz gern den dazugehörigen Wert (ermittelt durch soundexFkt.) in das dazugehörige Feld "soundexwert" schreiben lassen.
Wie stelle ich das jetzt am besten an.
Dachte da an sowas wie
Select wort from tblworte;
for (jeden Eintrag aus wort) {
$wortsoundex = soundex(wort1);
insert into tblworte (wort, soundexwert) VALUES (wort1, $wortsoundex);
}

fil3s
16.09.2009, 15:03:06
Versuche es mal nicht mit INSERT, denn das ist einzig und allein dazu gut, neue Datensätze anzulegen. Nimm UPDATE, hier (http://dev.mysql.com/doc/refman/5.1/de/update.html) beschrieben.


in deinem falle müsste das passen:


$sql = 'SELECT wort FROM tblworte';


die Werte aus der Table einfach durch ne Schleife wandern lassen und dann folgendes ausführen:

$sql2 = 'UPDATE tblworte SET soundexwert='.$soundex($wort).'
WHERE wort='.$wort;

consch
17.09.2009, 00:51:42
Hallo,
vielen Dank schon mal für die Hilfe :)

ich habe jetzt folgenden Code

//Verbindung zur DB herstellen
require_once("dbconnect.php");
$sql = 'SELECT wort FROM tblworte';
$ergebnis = mysql_query($sql) or die(mysql_error());
echo mysql_num_rows($ergebnis);
while($result = mysql_fetch_array($ergebnis)) {
$dbwort = $result['wort'];
$sounddb =soundex($dbwort);
$sql2 = 'UPDATE tblworte SET soundexwert='.soundex($dbwort).' WHERE wort='.$dbwort;
}
echo "ENDE";
$dbwort und $sounddb werden korrekt ausgegeben, aber die Übertragung in die DB funktioniert nicht. Fehlermeldung kommt keine. Woran könnte das liegen?

vt1816
17.09.2009, 11:16:23
[...]
$dbwort und $sounddb werden korrekt ausgegeben, aber die Übertragung in die DB funktioniert nicht.

Weil Du nur den Code für das Update geschrieben hast, es aber nicht ausführst.
$update = mysql_query($sql2) or die(mysql_error());



[...]
Fehlermeldung kommt keine. Woran könnte das liegen?

Hast Du die Anzeige der Fehlermeldungen überhaupt aktiviert?

consch
17.09.2009, 14:39:30
Oh man, ich bin echt ein Dummchen.
Vielen Dank, das hab ich echt verpeilt.
Fehlermeldungen werden sonst angezeigt, also denke mal ist dann aktiviert.

Jetzt habe ich nur ein Problem, die Werte sind nicht immer korrekt.
Woran könnte das liegen? Wenn die Wörter einzeln teste, kommen andere Werte raus.
Insbesondere bei denen, die länger als 5 Zeichen sind. rundet soundex? Oder was könnte das sein.

Habe mal ein Bild angehangen, was ich meine.

vt1816
17.09.2009, 15:05:36
[...]
Jetzt habe ich nur ein Problem, die Werte sind nicht immer korrekt.
Woran könnte das liegen? Wenn die Wörter einzeln teste, kommen andere Werte raus.
Insbesondere bei denen, die länger als 5 Zeichen sind. rundet soundex? Oder was könnte das sein.

Habe mal ein Bild angehangen, was ich meine.

Hast Du Dir mal die Beschreibung der Funktion angesehen. Der Rückgabewert der Funktion soundex() (http://de.php.net/soundex) besteht immer aus einem Buchstaben und drei Ziffern.

Deine Beispiele ergeben bei mir
L235 -
U536 -
A435 -
B536 -

also die jeweils ersten vier Zeichen aus Deiner Datenbank.

Mit welcher PHP-Version arbeitest Du?

consch
17.09.2009, 15:24:14
Ich benutze php5.
Ich habe mir die Funktion schon angeschaut, aber es wird doch mit soundex(string) durchgeführt. Daran kann man ja nichts falsch machen. Dachte ich zumindest :(

*EDIT*
Dann müsste ich höchsten den Wert nach den ersten 4 zeichen abschneiden.
Aber denke das ist auch nicht der Sinn dieser Funktion.

cortex
17.09.2009, 15:36:11
warum verwendest du überhaupt soundex( ) und nicht metaphone( ) (http://de2.php.net/manual/de/function.metaphone.php) ?

dazu auch nochmal dieser thread (http://www.selfphp.de/forum/showthread.php?t=21609).

cx

rarios
17.09.2009, 17:03:15
Oh man, ich bin echt ein Dummchen.
Vielen Dank, das hab ich echt verpeilt.
Fehlermeldungen werden sonst angezeigt, also denke mal ist dann aktiviert.
[...]
ich glaube, das denken reicht da nicht.
Beim Entwickeln immer mit error_reporting arbeiten!

consch
17.09.2009, 19:24:18
warum verwendest du überhaupt soundex( ) und nicht metaphone( ) (http://de2.php.net/manual/de/function.metaphone.php) ?

dazu auch nochmal dieser thread (http://www.selfphp.de/forum/showthread.php?t=21609).
cx Hm, weil ich den Einsatz von metaphone auch noch nicht so oft gesehen habe, sondern meistens die Rede von soundex war. Ich habe mir das aber mal angeschaut, auch hier bei selfphp. Was mir aber nicht klar ist, wozu [, int $phones] da ist, in den Beispielen ist das nicht integriert. Also es kommt dort nicht zum Einsatz.
*EDIT*
Habe es rausbekommen. Dieser INT gibt an, wieviele Zeichen ausgegeben werden sollen.
Aber dann gibt es doch eigentlich keinen Unterschied zwischen soundex zumindest wird mir der nicht so richtig klar ...


ich glaube, das denken reicht da nicht.
Beim Entwickeln immer mit error_reporting arbeiten!
Ja, Danke - werde es beherzigen. Danke.

feuervogel
17.09.2009, 21:18:19
was soll eigentlich der ganze umstand?

"update tblworte set soundexwert = soundex(wort)"

reicht doch vollkommen aus. abgesehen davon, dass die englische aussprache genommen wird und dass ähnlich klingende worte nicht ähnliche bedeutung haben müssen -- was soll das ganze eigentlich?

consch
17.09.2009, 22:20:34
Wie Umstand? Was genau meinst Du?
Danke @all, ihr habt mir sehr geholfen.

cortex
17.09.2009, 22:20:49
Dieser INT gibt an, wieviele Zeichen ausgegeben werden sollen.

gibt's noch eine quellenangabe dazu? das php-manual schweigt sich darüber aus...

Aber dann gibt es doch eigentlich keinen Unterschied zwischen soundex [...]

schau dir doch einfach beide funktionen anhand selbstgewählter beispiele an. das manual sagt:

Die Metaphone-Funktion arbeitet genauer als soundex( ), da sie die Grundregeln der englischen Aussprache kennt.

dies entspricht auch meinen erfahrungen; auch bei der verwendung im deutschen. ausserdem muss man sich dies vor augen halten:

Die Funktion soundex gibt einen String aus 4 Zeichen, beginnend mit einem Buchstaben, zurück.

in meinen augen kann das prinzipiell nicht besonders gut funktionieren - die zurückgegebene information ist prinzipiell beschnitten; durch die kodierung ist ein vergleich ähnlich klingender worte ungleich schwerer als bei metaphone.

in anlehnung an das kritische beispiel (http://de.wikipedia.org/wiki/Soundex#Kritik_an_dem_Verfahren) in der deutschen wikipedia:


$var1a = 'britney';
$var1b = 'spears';
$var1c = $var1a . ' ' . $var1b;

$var2a = 'bewährten';
$var2b = 'superzicke';
$var2c = $var2a . ' ' . $var2b;


ergebnisse mit soundex:


B635 //$var1a
S162 //$var1b
B635 //$var1c

B635 //$var2a
S162 //$var2b
B635 //$var2c


ergebnisse mit metaphone:


BRTN
SPRS
BRTNSPRS

BRTN
SPRSK
BRTNSPRSK


cx

cortex
17.09.2009, 22:21:41
was soll das ganze eigentlich?

der sinn und zweck des ganzen würde mich übrigens auch interessieren.

cx

consch
18.09.2009, 02:27:29
gibt's noch eine quellenangabe dazu? das php-manual schweigt sich darüber aus...
Jepp die gibt es. hier (http://www.php-testen.com/funktionen/string/metaphone/#result)
Der Sinn ist, dass ich eingegebene Wörter mit anderen Vergleichen will um diese Vorzuschlagen etc.
Habe nun levensthein, metaphone und soundex verbunden, also gehe alle drei Algos durch um Ergebnisse zu erzielen.
Wie gesagt, ihr habt mir sehr geholfen - vielen, vielen Dank noch mal dafür.

cortex
18.09.2009, 10:15:53
Jepp die gibt es. hier (http://www.php-testen.com/funktionen/string/metaphone/#result)

das ist für meine begriffe keine glaubwürdige quelle:

1. die anwendung des fraglichen parameters wird nicht erklärt
2. die domain ist keine (offizielle) referenz

so bleibt das ganze in meinen augen vorerst ungeklärt.

ihr habt mir sehr geholfen - vielen, vielen Dank noch mal dafür.

bitteschön .-

cx

feuervogel
18.09.2009, 10:56:16
Wie Umstand? Was genau meinst Du?
Danke @all, ihr habt mir sehr geholfen.

Siehst du einen Unterschied zwischen:


require_once("dbconnect.php");
$sql = 'update tblworte set soundexwert = soundex(wort)';
$ergebnis = mysql_query($sql) or die(mysql_error());


und


//Verbindung zur DB herstellen
require_once("dbconnect.php");
$sql = 'SELECT wort FROM tblworte';
$ergebnis = mysql_query($sql) or die(mysql_error());
echo mysql_num_rows($ergebnis);
while($result = mysql_fetch_array($ergebnis)) {
$dbwort = $result['wort'];
$sounddb =soundex($dbwort);
$sql2 = 'UPDATE tblworte SET soundexwert='.soundex($dbwort).' WHERE
wort='.$dbwort;
$update = mysql_query($sql2) or die(mysql_error());
}
echo "ENDE";


? Falls nein: die erste Variante ist meine und weniger umständlich.

consch
18.09.2009, 23:46:26
@feuervogel: ach das meintest Du. Ich dachte Du meinstest generell die ganze Geschichte mit soundex und metaphone. Danke für den Hinweis. Ich bin ja auch noch am Lernen. Werde es versuchen zu verinnerlichen. Danke.