Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwarka Php+mysql Kilka Pytań
Forum PHP.pl > Forum > PHP
rw77
Wyszukiwarka ma szukać w tabeli 'spis' w polu 'temat'

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>&nbsp;&nbsp;<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ć sad.gif
rolling_stone
Cytat(rw77 @ 2004-08-23 20:45:18)
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ć sad.gif

Musisz doprowadzić do takiej sytuacji, kiedy zapytanie SQL będzie wyglądać:

  1. SELECT * FROM `spis` WHERE ((UPPER(`temat`) LIKE upper('%Ford%')) AND (UPPER(`temat`) LIKE upper('%silnik%')))



Nie wiem, chyba trzeba by było poszczególne słowa w zapytaniu oddzielić np. przecinkami, a potem każdy z tych kawałków wsadzić jako osobny element tablicy. Na podstawie tej tablicy byś mógł zmodyfikować zapytanie tak, aby skrypt sam dodawał potrzebne frazy po "AND".

I tak moja intuicja podpowiada mi, że jest jakiś prostszy sposób. winksmiley.jpg
itsme
z tego co wiem przy LIKE nie ma znaczenia wielkosc liter
rw77
Dzięki rolling_stone – zaraz to sprawdzę. Zapytania z wyszukiwarki będę dzielił explode + pętla I później to w SELECT

Co do LIKE- tak niema znaczenia czy będzie to np. 'Ford' czy 'ford'.
A co jeśli w tabeli będzie temat 'Ford ma nowy silnik'
A zapytanie z wyszukiwarki będzie 'Ford silnik rama' – to otrzymam false, brak słowa 'rama' A chciałbym by pokazał wynik do tego tematu.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.