0

私は約 3000 冊の本のデータベースを持っており、タイトル、主題、または著者のいずれかで本をデータベースから検索できるようにしたいと考えています。正しく理解する。誰でも助けてください。以下は、スクリプトでどこまで来たかです..そして私のmysqlデータベースのテーブルの例

<?php

if (@$find == "")




// Otherwise we connect to our Database

mysql_connect("localhost", "root", "erhun") or die(mysql_error());


mysql_select_db("books") or die(mysql_error());


// We perform a bit of filtering
@$find = strtoupper($find);
@$find = strip_tags($find);
@$find = trim ($find);

@$search = strip_tags(stripslashes(mysql_real_escape_string(@$db, @$_POST["search"])));

//query the database
@$query = ("SELECT * FROM `project` WHERE (`author1` LIKE '%$search%' OR `main_title`               `LIKE '%$search%' OR `subj1` LIKE '%$search%')");  


//displaying the data
@$results=mysql_query(@$query) or die(mysql_error ());

if(mysql_num_rows(@$results) >= 1)

//here the table starts
echo "<table id='results'>";
while($row=mysql_fetch_array($results))


{
echo "<tr><td><img src='image1/".$row['image']."' height='100px' width='90px'></td><td   valign='top'>
<b><a href='details.php?id=".$row['book_id']."'>".$row['main_title']."<br/>
By: ".$row['author1']."</a></b><br/>
<b>Call no:</b> ".$row['call_no']."<br/>
<b>Type:</b> ".$row['item_type']."<br/>
<b>Year:</b> ".$row['publdate']."</td></tr>";
}
echo "</table>";

?>

私のテーブルにはこれらの異なるフィールドが含まれています

全文
book_id image main_title author1 call_no item_type publdate publplace publshr item_home item_status subj1 subj2

4

2 に答える 2

0

更新しました :

この行を変更してみてください:

@$search = strip_tags(stripslashes(mysql_real_escape_string($db, @$_POST["search"])));

に :

@$search = strip_tags(stripslashes(mysql_real_escape_string( @$_POST["search"])));

私が変更する必要があったのは、検索文字列を渡すだけで $db 変数を削除したことだけで、うまく機能しているようです。他の理由で $db が必要だった可能性があるため、入手したドキュメントに戻ってさらに調査することをお勧めします。

PS私はまだMATCH AGAINSTを使用することをお勧めします。件名、タイトル、および作成者フィールドに適切なFULLTEXTインデックスがある場合は、MATCH AGAINSTを使用できます。

@$query = "SELECT * FROM `project` WHERE MATCH (subj1, main_title, author) AGAINST ('$search' IN NATURAL LANGUAGE MODE)";

このクエリでは、3 つの列すべてにフルテキスト インデックスが必要です。

ALTER TABLE project ADD FULLTEXT(subj1, main_title, author);

インデックス内の列のリストは、私が信じている最適化のために、クエリで一致させたい列のリストと一致する必要があります。個々の列を個別に照合できるようにする場合は、他のインデックスを作成する必要があります。このクエリは私のテスト ページでも機能し、少し実験して通常の検索クエリをより適切にサポートする必要があります。

PPS DB を選択できる場合は、さまざまな種類のテキスト検索をよりサポートするものを使用することをお勧めします。私がよく知っている唯一のリレーショナル データベースは PostgreSQL と MySQL で、PostgreSQL はテキスト検索のサポートがはるかに優れています。

于 2013-08-05T12:20:50.617 に答える
0

のようにしてみてください

@$query = "SELECT * FROM `project` WHERE (`author1` LIKE '%$search%' OR `main_title` LIKE '%$search%' OR `subj1` LIKE '%$search%')"; 

「main_title」の後に余分な引用符`があります

于 2013-08-05T11:44:17.497 に答える