SELECT * FROM ".$table
." WHERE irgendwas like '%".$search."%' or irgendwas2 like '%".$search."%' order by ".levenshtein(???)." $sSql= "SELECT *
FROM $sTable
WHERE spalte LIKE '%$sSearch%'
ORDER BY soundex(spalte)";<?php
// PHP CODE INCLUDING DB LOOKUPS HERE
usort($searchresults, "finallevenshteinsortfunction");
function finallevenshteinsortfunction($a, $b)
{
if(($a['levenshtein'] > $b['levenshtein']) || ( $a['levenshtein'] == $b['levenshtein'] && strnatcasecmp( $a['Last_Name'], $b['Last_Name']) >= 1) ){ return $a['levenshtein'];} // Ok... The levenstein is greater OR with the same levenshtein, the last name is alphanumerically first
elseif($a['levenshtein'] == $b['levenshtein']){ return '0';} // The levenstein matches
elseif($a['levenshtein'] < $b['levenshtein']){ return -$a['levenshtein'];}
else{die("<!-- a horrable death -->");}
}
?>while $search_array = mysql_fetch_array($searchresults) {
$reihenfolge = finallevenshteinsortfunction($sucheingabe, $search_array["irgendwas"]);
SELECT ... ORDER BY ".$reihenfolge."...$aSortiert= getSimilar( $sSuchwort, $aAbfrageErgebnisse );<?php
function getSimilar( $sSuch, $aErg ) {
$ar= array();
foreach( $aErg as $v1 ) {
$iSim= similar_text( $sSuch, $v1 );
$iLev= levenshtein( $sSuch, $v1 );
if ( $iSim!= 0 ) {
$iLevError= intval( $iLev/ strlen( $v1 )* 100 );
$iPerSim= intval( $iSim/ strlen( $v1 ) )* 100;
$iTotal= $iPerSim- $iLevError;
} else {
$iTotal= 0;
}
$ar[$v1]= $iTotal;
}
arsort( $ar );
return $ar;
}
$aAbfrageErgebnisse= array( 'jany', 'hotel', 'jane', 'jaine', 'gun', 'jaimy', 'june', 'rain', 'house' );
$sSuchwort= 'jane';
$aSortiert= getSimilar( $sSuchwort, $aAbfrageErgebnisse );
print_r( $aSortiert );
?>foreach( $aSortiert as $k1=> $v1) {
foreach( $aAbfrageErgebnisse as $k2=> $v2 ) {
if ( $v2['spalte']== $k1 ) {
print_r( $v2 );
break;
}
}
}Array ( [jane] => 100 [jaine] => -20 [june] => -25 [jany] => -25 [jaimy] => -60 [rain] => -75 [house] => -80 [hotel] => -80 [gun] => -100 )foreach( $aSortiert as $k1=> $v1 bewirkt in diesem Beispiel nichts.$query = "SELECT * FROM words WHERE deutsch like '%".$search."%'
$resultID = @mysql_query($query);$results = mysql_fetch_array($resultID);$aSortiert= getSimilar( $search, $results );foreach( $aSortiert as $k1=> $v1) {
foreach( $results as $k2=> $v2 ) {
if ( $v2['deutsch']== $k1 ) {
print_r( $v2 );
break;
}
}
} erhalte ich als Ausgabe: 4Ärmliches Haus7 $num = mysql_num_rows($result);
for ($i=0; $i<$num; $i++)
{
$de = mysql_result($res, $i, "deutsch");
usw.
} auswählen?$de = mysql_result($res, $i, "deutsch"); meine ich $de = mysql_result($result, $i, "deutsch");Array ( [0] => 7 [id] => 7 [1] => Ärmliches Haus [deutsch] => Ärmliches Haus [2] => φτωχικό [griechisch] => φτωχικό [3] => [zusatz] => [4] => Unbekannt [artikel] => Unbekannt [5] => Substantiv [wortart] => Substantiv [6] => 4 [genitiv] => 4 [7] => [gen_ersatz] => [8] => 0 [plural] => 0 )$res1= mysql_query( $sSql ) or die( 'Fehler: '. $sSql. ' - '. mysql_error() );
$aAbfrageErgebnisse= array();
while ($r1= mysql_fetch_array( $res1 ) ) {
$aAbfrageErgebnisse[]= $r1;
}
mysql_free_result( $res1 );Damit sind wir bei den Grundlagen angekommen. Bitte so mit einflechten, dann die Ergebnisse (print_r()) nochmal hier posten - und möglichst nachdem du im Browser Rechtsklick -> Quelltext anzeigen gewählt hast, dann ist es besser lesbar. Und ja - deine Reihenfolge bleibt erhalten - schließlich und endlich können wir uns ja beliebig viele Kopien des Feldes erzeugen...Array
(
[0] => Array
(
[0] => 5868
[id] => 5868
[1] => Haus
[deutsch] => Haus
[2] => κατοικία
[griechisch] => κατοικία
[3] =>
[zusatz] =>
[4] => Unbekannt
[artikel] => Unbekannt
[5] => Unbekannt
[wortart] => Unbekannt
[6] => 3
[genitiv] => 3
[7] =>
[gen_ersatz] =>
[8] => 0
[plural] => 0
))
function getSimilar( $sSuch, $aErg ) {
$ar= array();
foreach( $aErg as $k1=> $v1 ) { // jeden Ergebnisdatensatz durchgehen
$iSim= similar_text( $sSuch, $v1[1] ); // wir vergleichen nur Schlüssel [1] von jedem Datensatz
$iLev= levenshtein( $sSuch, $v1[1] );
if ( $iSim!= 0 ) {
$iLevError= intval( $iLev/ strlen( $v1[1] )* 100 );
$iPerSim= intval( $iSim/ strlen( $v1[1] ) )* 100;
$iTotal= $iPerSim- $iLevError;
} else {
$iTotal= 0;
}
$ar[$k1]= $iTotal; // Schlüssel des Datensatzfeldes merken
}
arsort( $ar ); // nach errechnetem Wert sortieren
return $ar;
}
// Abfrage definieren und ausführen
$sSuchwort= 'jane';
$sSql= "SELECT *
FROM tabelle
WHERE spalte LIKE '%$sSuchwort%'";
$res1= mysql_query( $sSql ) or die( 'Fehler: '. $sSql. ' - '. mysql_error() );
// Datensätze sammeln
$aAbfrageErgebnisse= array();
while ( $r1= mysql_fetch_array( $res1 ) ) {
$aAbfrageErgebnisse[]= $r1;
}
mysql_free_result( $res1 );
// Ähnlichkeitssortierung ermitteln
$aSortiert= getSimilar( $sSuchwort, $aAbfrageErgebnisse );
// Datensätze entsprechend ihrer Ähnlichkeit ausgeben
foreach ( $aSortiert as $k1=> $v1 ) {
print_r( $aAbfrageErgebnisse[$k1] );
}
WHERE spalte LIKE '%$sSuchwort%' LIMIT 0,10 erhalte ich zwar 10 Datensätze, allerdings fängt das Ganze nicht bei dem Wort an, bei dem es ohne LIMIT anfängt. Also zum Beispiel bei Eingabe von "Hand" erhalte ich nicht als erstes "Hand", sondern "Handy". // Datensätze entsprechend ihrer Ähnlichkeit ausgeben
$i1= 0;
foreach ( $aSortiert as $k1=> $v1 ) {
if ( $i1>= $iStart&& $i1< $iStart+ $iAnzahl ) print_r( $aAbfrageErgebnisse[$k1] );
$i1++;
}...wobei $iStart und $iAnzahl in dieser Reihenfolge dieselbe Funktion übernehmen wie die Angaben bei LIMIT unter MySQL.$i1>= $iStart nicht true zurückliefern?$i1= 0;$i1++; steht innerhalb der if-Klausel. Das heißt, dass das $i1 (=0)überhaupt nicht verändert wird, weil ja $i1 auf jeden Fall kleiner ist als $iStart.$i1++; außerhalb der if-Klausel innerhalb des foreach einfüge, dann werden mir die korrekten Datensätze angezeigt, nur dass es mit jeder Seite jeweils 10 mehr werden (weil eben keine Datensätze "weggeschmissen" werden.
Sortieren von LinkedList
UZUZ 19.02.2008 - 59 Hits - 3 Antworten
Musik in mp3 sortieren.
Cooper3210 30.09.2008 - 2009 Hits -
Datensätze mit bestimmter Endung
Uesch 18.11.2008 - 43 Hits - 2 Antworten
Zeige Datensätze 0 - 7 (8 insgesamt)
Uesch 07.02.2009 - 133 Hits - 2 Antworten