Erweiterte Suche MySQL

Hallo! Ich habe eine ziemlich große Datenbank erstellt und habe dafür ein Ajax LiveSearch-Funktion geschrieben. Die Suche funktioniert super, jetzt möchte ich aber die Suche einwenig erweitern:

  1. Volltextsuche: mit allen angegebenen Worten
  2. Teilsuche: mit einem der Wörter, der in der Tabelle vorkommen kann.
  3. Durch Checkboxen möchte ich den 2 erweiterten Suchfeldern(Volltextsuche, Teilsuche) mitteilen in welche Tabelle(Kostenstelle, Auftrag, etc…) gesucht wird.

Ich habe dafür bereits ziemlich viel Zeit investiert, habe aber bis jetzt nur Pech…
Ich würde mich sehr freuen, wenn jemand mir dabei helfen könnte! SOS!!!

Hier ist der gesamte Code(Formular, JavaScript, PHP):

[HTML]

Ajax Suche

Suche <input type=„text“ onkeyup=„searchFor(this.value);“/>

<input type=„checkbox“ id=„checkbox1“ name=„checkbox1“>
<label for=„erweitert“>Erweiterte Suche</label>

<ul>
<label for=„Suchein“><b>Suche in:</b></label>
<hr>

<p align=left>Volltextsuche <input type=„text“ onkeyup=„searchFor(this.value);“/>
<p align=left>Teilsuche <input type=„text“ onkeyup=„searchFor(this.value);“/>

</ul>

<ul>
<label for=„Kostenstelle“>Kostenstelle</label>
<input type=„checkbox“ id=„checkbox“ name=„checkbox“ >

</ul>
<ul>
<label for=„Auftrag“>Auftrag</label>
<input type=„checkbox“ id=„checkbox“ name=„checkbox“ >

</ul>
<ul>
<label for=„Hierarchien“>Hierarchien</label>
<input type=„checkbox“ id=„checkbox“ name=„checkbox“ >

</ul>
<ul>
<label for=„Kostenart“>Kostenart</label>
<input type=„checkbox“ id=„checkbox“ name=„checkbox“ >

</ul>

<ul>
<label for=„Organisation“>Organisation</label>
<input type=„checkbox“ id=„checkbox“ name=„checkbox“ >

</ul>

<ul>
<label for=„Profitcenter“&gt:stuck_out_tongue_winking_eye:rofitcenter</label>
<input type=„checkbox“ id=„checkbox“ name=„checkbox“ >

</ul>

<ul>
<label for=„Leitfaden“>Leitfaden</label>
<input type=„checkbox“ id=„checkbox“ name=„checkbox“ >

</ul>

<ul>
<label for=„SAP-GB“>SAP-GB</label>
<input type=„checkbox“ id=„checkbox“ name=„checkbox“ >

</ul>

<div id=„ergebnis“></div>
</body>
</html>[/HTML]

[PHP]function searchFor(suchbegriff){
var xmlHttp = null;
// Mozilla, Opera, Safari sowie Internet Explorer 7
if (typeof XMLHttpRequest != ‚undefined‘) {
xmlHttp = new XMLHttpRequest();
}
if (!xmlHttp) {
// Internet Explorer 6 und älter
try {
xmlHttp = new ActiveXObject(„Msxml2.XMLHTTP“);
} catch(e) {
try {
xmlHttp = new ActiveXObject(„Microsoft.XMLHTTP“);
} catch(e) {
xmlHttp = null;
}
}
}
// Wenn das Objekt erfolgreich erzeugt wurde
if (xmlHttp) {
var url = „suche.php“;
var params = „suchbegriff=“+suchbegriff;

xmlHttp.open(„POST“, url, true);

//Headerinformationen für den POST Request
xmlHttp.setRequestHeader(„Content-type“, „application/x-www-form-urlencoded“);
xmlHttp.setRequestHeader(„Content-length“, params.length);
xmlHttp.setRequestHeader(„Connection“, „close“);

xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4) {
// Zurückgeliefertes Ergebnis wird in den DIV „ergebnis“ geschrieben
document.getElementById(„ergebnis“).innerHTML = xmlHttp.responseText;
}
};
xmlHttp.send(params);
}
}[/PHP]

[PHP]<?php
//-- pre-condition ---------------------------------------------------------------------------------

error_reporting(E_ALL);

mysql_connect(‚localhost‘, ‚root‘, ‚‘);
mysql_select_db(‚elko‘);

//-- example input ---------------------------------------------------------------------------------

$sSearch = $_POST[„suchbegriff“];

//--------------------------------------------------------------------------------------------------

function mysqlSearch($sSearch)
{
// replace multiple whitespaces with a simple blank
$aSearch = explode(’ ‚, preg_replace(‘#\s+#’, ’ ', $sSearch));
// count search words once
$iSearch = count($aSearch);
if ($iSearch == 0) {
return array();
}
// remove addslashes (automatically executed by php) and use mysql_real_escape_string instead. it’s more secure against sql injection
if (get_magic_quotes_gpc()) {
$aSearch = array_map(‚stripslashes‘, $aSearch);
}
$aSearch = array_map(‚mysql_real_escape_string‘, $aSearch);

// get all tables in selected database
$sSQL1 = ‚SHOW TABLES‘;
$rRes1 = mysql_query($sSQL1);

// save hits
$aHits = array();
while ($aTable = mysql_fetch_array($rRes1)) {
$sTable = $aTable[0];

// get all columns from each table
$sSQL2 = "SHOW COLUMNS FROM $sTable";
$rRes2 = mysql_query($sSQL2);

// combine search words with columns
$aPermutation = array();
while ($aColumn = mysql_fetch_assoc($rRes2)) {
$sColumn = $aColumn[‚Field‘];
for ($i = 0; $i < $iSearch; $i++) {
$sSearchword = $aSearch[$i];
$aPermutation[] = "$sColumn LIKE ‚%$sSearchword%‘";
}
}

// combine as OR-condition
$sSQL4 = "SELECT * FROM $sTable WHERE " . implode(’ OR ', $aPermutation);
$rRes4 = mysql_query($sSQL4);

// collect result
while ($aHit = mysql_fetch_assoc($rRes4)) {

$aHits[$sTable][] = $aHit;

}
}

return $aHits;
}

//-- example output --------------------------------------------------------------------------------

echo print_r(mysqlSearch($sSearch), true);

//--------------------------------------------------------------------------------------------------
?> [/PHP]

Vielen Dank im Vorab!!

Hallo tushkanwn,

kannst Du uns auch mitteilen, wo Dein Problem ist? Was klappt nach Deiner Meinung nicht?

MfG Georg V.

P.S.: Bitte benutzt doch einmal die Vorschau, damit ihr seht, das man das Tag pre sinnvoller Weise nutzt, um den Code lesbarer zu gestalten.

Hallo Georg V,

also ich habe jetzt keine Ahnung wie SQL-Statements aussehen sollen um Volltextsuche und Teilsuche für die gesamte Datenbank zu realisieren.
Wenn Ihr einen Vorschlag habt,würde ich mich darauf seh freuen!

Hallo tushkanwn

also ich habe jetzt keine Ahnung wie SQL-Statements aussehen
sollen um Volltextsuche und Teilsuche für die gesamte
Datenbank zu realisieren.

Zumindest wie MySQL-Statements für Volltextsuche aussehen kannst Du hier nachlesen:
http://dev.mysql.com/doc/refman/5.5/en/fulltext-sear…
Ob die Frage nach der Umsetzung für Java-Script dann vielleicht besser im Java-Script-Brett aufgehoben ist, wirst Du ja sehen. Ich kann jedenfalls zu Java-Script nichts beitragen.

Viele Grüße
Marvin