Tabela spis:
id|autor|data|temat|kategoria|
I tabele z treścią które nie będą przeszukiwane:
artykul_1 , artykul_2, ...
id|tresc|
Oto kod wyszukiwarki który skleciłem:
---------------------------------------------------------------------------------------------
<? include("db.php"); //połączenie z bazą ?>
<table width="600" cellspacing="0" cellpadding="0" border="0">
<tr>
<td width=50% align=left>
<form method="POST" action="szukaj.php">
<input type=text name=fraza size=30 value="<? echo(htmlspecialchars($fraza)); ?>" class=form> <input type=submit value=Szukaj class=formb><br>
<INPUT TYPE="HIDDEN" NAME="search" VALUE="tem">
</form>
</td>
</tr>
</table>
<?
//STRONICOWANIE
$licz=0;
$licz=strlen($fraza);
if($licz>=2){
$limit = 10; //ilość rekordów na stronie;
if( empty( $_GET['id'] ) )
{
$ile = 0;
}
else
{
$ile = $_GET['id'];
}
//pobrać liczbę wyników
$rekord="SELECT * FROM spis WHERE ((UPPER(`temat`) LIKE upper('%$fraza%')) )";
$rekord = mysql_query($rekord);
$znaleziono = mysql_num_rows($rekord); //ile znaleziono
?>
<TABLE ALIGN="CENTER" WIDTH="700" BORDER="0">
<?
$szukaj="SELECT * FROM `spis` WHERE ((UPPER(`temat`) LIKE upper('%$fraza%')) ) LIMIT ".($ile*$limit).",".$limit."";
$result = mysql_query($szukaj);
while ($row = mysql_fetch_array($result)){
$sql = "SELECT * FROM artykul_$row[kategoria] WHERE idpracy='$row[idpracy]'" ;//pobiera tresc artykułu
$wynik = mysql_query($sql);
$b=mysql_fetch_array($wynik);
$b[tresc]=substr($b[tresc],0,200);
$b[tresc]=("$b[tresc] ...");
$line=$row[temat];
$line = str_replace("$fraza", "<span style=\"background-color:#ffff99;\"><b>$fraza</b></span>", $line);
$tresc=$b[tresc];
$tresc=strip_tags($tresc); //usuń tagi html
echo" <tr><TD><li><a href=\"../prace/praca.htm?i=$row[idpracy]\">$line</a><br>$tresc<br><br></td></tr>";}
echo"<tr><td align=\"center\"><br>";
for($i = 0; $i<ceil($znaleziono/$limit); $i++)
{
echo ' <a href="szukaj.php?id='.$i.'&fraza='.$fraza.'">['.($i+1).']</a> ';
}
echo"</td></tr>";
}elseif($licz==0){echo"<TABLE ALIGN=\"CENTER\" WIDTH=\"700\" BORDER=\"0\"><tr><td></td></tr>";
}else { echo "<TABLE ALIGN=\"CENTER\" WIDTH=\"700\" BORDER=\"0\"><tr><td>wpisz conajmniej 2 litery</td></tr>"; }
?>
</table>
<?
mysql_close($mysql_link);
?>
---------------------------------------------------------------------------------------------
Kod działa ale ma kilka wad tz. Za każdym wyszukaniem przeszukuje dwukrotnie tabelę spis, nie chcę obciążać bazy.
Drugie pytanie:
Dajmy na to że w bazie 'spis' jest temat: 'Ford ma nowy silnik'
Chcąc znaleźć Ford jest wszystko OK, ale gdy wpisze 'Ford silnik' wyszukiwarka da rezultat 0.
Chyba do tego jest AND lub OR ale nie wiem jak tego użyć
