Datenbanksuche

Hi,

ich bin mit meiner neuen Seite fast fertig,jetzt fehlt nur noch die Such-Funktion.
Ich will eine Suche durch eine DB mit Downloads machen.
Erstmal die Struktur der Datenbank:
Code:
CREATE TABLE `dl` (
  `Id` int(20) NOT NULL auto_increment,
  `Name` varchar(255) NOT NULL default '',
  `Beschreibung` text NOT NULL,
  `Datei` varchar(255) NOT NULL default '',
  `Users` text NOT NULL,
  `Cat` varchar(20) NOT NULL default '',
  `Anzahl` int(20) NOT NULL default '0',
  PRIMARY KEY  (`Id`)
) TYPE=MyISAM;

Bei der Suche sollen die Felder Name und Beschreibung durchsucht werden.
Meine erste Version, die ich mal gemacht habe war folgende:

PHP:
$suche = ereg_replace(" ","%",$suche);
$result_dl = mysql_query("SELECT * FROM $table_dl WHERE `Name` LIKE '%$suche%' OR `Beschreibung` LIKE '%$suche%') OR die(mysql_error());

Das hat auch eingentlich funktioniert, jedoch ist die Suche keineswegs optimal:
1. Wenn man nach zwei Wörtern such, wird nur ein Ergebnis gefunden, wenn die Wörter auch in dieser Reihenfolge vorkommen.
2. Die Suche gehen, wenn ALLE Suchbegriffe enthalten sind, und egal wo, also wenn zb. ein Begriff im Feld `Name` enthalten ist und der andrere in `Beschreibung`.

Ich hab dann das Script mal umgeschrieben, um das 1. Problem zu lösen:
PHP:
$such_array = explode(" ",$suche);
$anzahl = count($such_array);
$dl = "SELECT * FROM dl WHERE ";

for($i=0; $i<=$anzahl-1; $i++)
{
$dl .= "`Name` LIKE '%$such_array[$i]%' OR ";
$dl .= "`Beschreibung` LIKE '%$such_array[$i]%' OR";
}
$dl = substr($dl, 0, -3);

Da kommt dann so was raus:
Code:
SELECT * FROM dl WHERE `Name` LIKE '%wort_1%' OR `Beschreibung` LIKE '%wort_1%' OR`Name` LIKE '%wort_2%' OR `Beschreibung` LIKE '%wort_2%'

Das ist aber keinesweg Optimal, ich wollte es ja erstens mit AND machen, dass alle vorkommen müsen und 2. darf ja ein Wort in der einen und ein anderes in einer anderen Spalte sein.

Ich hab so das Gefühl, dass ich nicht weit weg bin, von der Lösung...

Wer kann mir helfen und nen Tipp geben?

Danke im Voraus, Markus
 
Zuletzt bearbeitet:
Ich hab mich glaub etwas zu undeutlich und umfangreich ausgedrückt.
Ich hab eigentlich auch schon fast rausgefunden, wie ich mein Problem lösen kann.

Ich kenn nur den genauen Syntax nicht.
Es gibt ja den JOIN befeh in mySQL. Mit dem würde ich einfach bei der Abfrage die Beiden Felder Name und Beschreibung verbinden und dann mit AND Operatoren abfragen:

So ähnlich:

SELECT * FROM dl WHERE join(Name,Beschreibung) LIKE '%wort_1%' AND '%wort_2%'

Ich weis, dass der Syntax falsch ist. Kann mir jemand den richtigen sagen?
 
Zuletzt bearbeitet:
Hi

Wäre es möglich, dass Du Dich mal klar ausdrückst?
Du hast eine Tabelle.
Wie soll nun gesucht werden?
Müssen beide Begriffe in der DB stimmen oder nur einer?
Müssen bei der Suche beide Felder ausgefüllt werden?

Auf jeden Fall ist Dein erster Ansatz bene....
 
Zurück