我有一个约3000本书的数据库,我希望能够通过标题,主题或作者在我的数据库中搜索书籍。我已尽力使用php和mysql编写脚本但我仍然没有做对。请有人帮忙。下面是我带来脚本的程度..以及我的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
图片
主题
作者1
call_no
物品种类
publdate
publplace
publshr
item_home
ITEM_STATUS
subj1
subj2
答案 0 :(得分:0)
尝试
@$query = "SELECT * FROM `project` WHERE (`author1` LIKE '%$search%' OR `main_title` LIKE '%$search%' OR `subj1` LIKE '%$search%')";
在“main_title”之后你有一个额外的引用`
答案 1 :(得分:0)
更新:
尝试更改此行:
@$search = strip_tags(stripslashes(mysql_real_escape_string($db, @$_POST["search"])));
到:
@$search = strip_tags(stripslashes(mysql_real_escape_string( @$_POST["search"])));
我唯一需要改变的是删除$ db变量,只是传入搜索字符串,它似乎工作正常。可能因为某些其他原因需要$ db,所以我建议回到你从中获得的文档并进一步调查。
P.S。我仍然建议使用MATCH AGAINST。如果您的主题,标题和作者字段具有适当的FULLTEXT索引,则可以使用MATCH AGAINST,例如:
@$query = "SELECT * FROM `project` WHERE MATCH (subj1, main_title, author) AGAINST ('$search' IN NATURAL LANGUAGE MODE)";
此查询要求您在所有三列上都有全文索引:
ALTER TABLE project ADD FULLTEXT(subj1, main_title, author);
索引中的列列表必须与您希望在查询中匹配的列的列表匹配,以便进行优化我相信。如果您希望能够单独匹配各个列,则必须创建其他索引。该查询也适用于我的测试页面,它应该通过一些实验更好地支持普通的搜索查询。
P.P.S。如果您可以选择DB,我建议您使用更多支持不同类型文本搜索的内容。我真正熟悉的唯一关系数据库是PostgreSQL和MySQL,PostgreSQL有一个很多更好的文本搜索支持。