Mysql, Suche, ggf Codeschnipsel?

breytex

Mitglied
Hallo zusammen!

Habe hier folgende Suchfunktion (nur das query):

PHP:
SELECT * FROM pdfs 
WHERE name LIKE '%".$suche_str."%' 
OR firma LIKE '%".$suche_str."%' 
OR ms LIKE '%".$suche_str."%' 
OR keywords LIKE '%".$suche_str."%' 
ORDER BY name ASC

Die Ergebnisse, die diese Suche ausgibt, sind aber unbefriedigend.
Wenn ich z.B. Porsche 911 eingebe, findet er nur alles, wo irgendwo mal "Porsche 911" vorkommt. Steht aber irgendwo "Porsche ( 911)" wird das schon nicht mehr gefunden.

Habe mir schon überlegt, das man ja einfach nach Leerzeile aufteilen und nach jedem Begriff einzeln suchen könnte. Würde aber mitsich bringen, dass dann bei der Eingabe "Porsche 911" auch der "Nissan 911" oder der "Porsche Boxter" gefunden wird.

Hat jemand vielleicht eine Idee, oder ein kleines Script zur Hand, was irgendwie solche Suchergebnisse gewichten kann ?

lG
 
Ups, da bin ich doch in den Favoriten um eine Zeile verrutsch und hab das PHP-Forum geöffnet :-D

Erstmal danke für die schnelle Antwort!
Funktioniert soweit.

Gibt es z.B. aber auch die Möglichkeit, dass sowas zu einem Ergebniss führt?
"Porsche baumhaus 911"

Er müsste hierbei auch wieder den Porsche 911 ausgeben, und das "Baumhaus" ignorieren.

will heißen:
Falls mal ein einzelnes Wort der Suchanfrage nicht im string drin ist, der Großteil der anderen aber schon, gibts trotzdem nen Ergebnis.

Okay, besseres Beispiel: "Porsche 911 Turbo". In der Datenbank gibts aber nur den normalen 911...
 
Da bewegst du dich jetzt in Richtung von bestehenden Algorithmen über die es einige Diskussionen und Seiten im Internet gibt.

In diesem Fall kann man die Wörter seperieren :
Code:
[...] WHERE `feld` LIKE '%ein%' OR `feld` LIKE '%Wort%'

Wie man allerdings hier die Qualität ermittelt ist ein komplexeres Thema, da nicht alle Algorithmen immer schnell genug sind.

Als nächsten Schritt muss man noch auf Groß-/Kleinschreibung achten.
 
ähnliches Problem...

Ich stehe vor einem ähnlichen Problem:
Vor einigen Tagen habe ich ein Skript geschrieben, welches mit beim Aufruf der Seite zuächst alles aus der betreffenden Tabelle ausgibt (natürlich ein wenig formatiert, damit es auch nach was aussieht).

Nun wurden Wünsche nach einer Suchfunktion laut.
Einmal google angeschmissen und ich habe oftmals ein und die selbe Lösung gesehen und gedacht "Kann ja nicht so schwer werden", aber denkste.
Dokter jetzt seit gut einem Tag daran rum, aber nichts bewegt sich. Offenbar wird die Variable nicht übergeben, näheres siehe Quellcodes:

Das ist die Seite die als erstes aufgerufen wird und wo das Suchformular liegt.
PHP:
<form action="https://example/intranet/index.php?q=abwesenheit_suchergebnis" method="POST">
<input type="text" size="17" name="Personensuche">
<input type="submit" value="Suchen">
</form>
<?php

$sql_query='SELECT Employee_No, Name, DATE_FORMAT(Datum, "%d.%m.%Y") AS Zeitraum, Missing_Day
			FROM fehlzeiten ORDER BY Name, Datum ASC;';

$query = mysql_query($sql_query);

if(!mysql_num_rows($query))
{
    echo "Keine Abwesenheiten für die kommenden 28 Tage eingetragen.";
}
else
{

	echo "<table>";
    while($row = mysql_fetch_row($query))
    {
		echo "<tr>";
		//echo "<td>$row[0]</td>";
		echo "<td>".utf8_encode($row[1])."</td>";

               if($row[3]=="Urlaub"){
                            $row[3]="Abwesend";
                            } else if ($row[3]=="Krank") {
                                        $row[3]="Abwesend";
                            }

		echo "<td>$row[2]</td>";
                echo "<td>$row[3]</td>";
		echo "</tr>";
    }
	echo "</table>";
}
?>

Das ist die Seite auf die verwiesen wird und wo die Suchvariable hin soll um mit der Query abgefeuert zu werden:
PHP:
<?php
//... Connect hab ich rausgelassen, das funktioniert soweit
$sql_query='SELECT Employee_No, Name, DATE_FORMAT(Datum, "%d.%m.%Y")
	AS Zeitraum, Missing_Day FROM fehlzeiten WHERE Name IN("'.$Personensuche.'")
	ORDER BY Datum ASC;' . mysql_error();

$sql_query_com='SELECT Employee_No, Name, DATE_FORMAT(Datum, "%d.%m.%Y") AS Zeitraum, Missing_Day
			FROM fehlzeiten ORDER BY Name, Datum ASC;';

$suche=str_replace(" ",$Personensuche);

if (strlen($Personensuche)>0)
{
 $ergebnis = mysql_query($sql_query) . mysql_error();
}
else
{
 $ergebnis = mysql_query($sql_query_com) . mysql_error();
}


  //$ergebnis = mysql_query($sql_query) . mysql_error();

if(!mysql_num_rows($sql_query))
{
    echo "Für '%Personensuche%' wurde keine Abwesenheit eingetragen." . mysql_error();
}
else
{

echo "<table>";

while($row = mysql_fetch_array($ergebnis))
    {
    echo "<tr>";

		echo "<td>".utf8_encode($row[1])."</td>";

               if($row[3]=="Urlaub"){
                            $row[3]="Abwesend";
                            } else if ($row[3]=="Krank") {
                                        $row[3]="Abwesend";
                            }

		echo "<td>$row[2]</td>";
                echo "<td>$row[3]</td>";
		echo "</tr>";
    }
	echo "</table>";
  }
?>
Sobald die Suche abgefeuert wurde kommt auf der verweisenen Seite nur "Für wurde keine Abwesenheit eingetragen." Daher mein Verdacht, dass die Variable nicht übergeben wurde...


Zusatzinfo: Ich arbeite mit dem CMS Drupal, die Fehlzeitentabelle liegt, wie Drupal auch, in einer MySQL-DB und das Intranet an sich auf einem MS Server (glaub 2003er) mit SSL-Verschlüsselung (siehe https).
 
PHP:
$sql_query='SELECT Employee_No, Name, DATE_FORMAT(Datum, "%d.%m.%Y")
    AS Zeitraum, Missing_Day FROM fehlzeiten WHERE Name IN("'.$Personensuche.'")
    ORDER BY Datum ASC;' . mysql_error();

Ich weiss nicht ob du es nur nicht mitkopiert hast oder ob du es tatsächlich vergessen hast aber du solltest ihm noch vor oben genanntem code sagen woher $Personensuche kommt.

PHP:
$Personensuche = $_POST['Personensuche'];

...Seite nur "Für wurde keine Abwesenheit eingetragen." Daher mein Verdacht...

Das könnte auch daher kommen das du
PHP:
echo "Für '%Personensuche%' wurde keine Abwesenheit eingetragen." . mysql_error();
anstatt
PHP:
echo "Für '$Personensuche' wurde keine Abwesenheit eingetragen." . mysql_error();

geschrieben hast
 
Besten Dank!

Besten Dank rd4eva!

Solch kleine Fehler können einem echt einen ganzen Tag rauben >.<

Die Suche funktioniert jetzt endlich so wie sie soll. VIELEN DANK!
 
Zurück