如果有一种简单的Mysql方法可以做到这一点,我很抱歉,但我发现很难得到任何有意义的搜索结果。
我正在搜索我的网站,搜索效果很好,直到我尝试让它通过一个基于下拉列表中所选类型的单词进行搜索。
这个查询最能代表我想要做的事情:
SELECT *
FROM Books
JOIN bookauthor ON books.BookID = bookauthor.BookID
JOIN authors ON bookauthor.AuthorID = authors.AuthorID
JOIN bookgenre ON books.BookID = bookgenre.BookID
JOIN genre ON bookgenre.GenreID = genre.GenreID
WHERE genre.Genre = 'Fantasy'
WHERE books.BookName LIKE '%$variable%' OR authors.Forename LIKE '%$variable%' OR authors.Surname LIKE '%$variable%'
GROUP BY books.BookName ORDER BY authors.AuthorID
我想选择所有选择了类型的书,然后从中进行其他检查,因为现在OR覆盖了其他检查,最终只会吐出所有记录。
我猜我可能需要一个查询来选择该类型的所有书籍,然后运行另一个查询从以前的查询中进行选择。只是我以前从来没有这样做过,我需要把它纳入我的搜索功能。。。
这是我目前的搜索代码,它的工作原理很好,除了当你试图搜索除"全部"之外的流派时,如果你只选择一个流派而不键入任何内容,它将显示该流派的书籍,只是如果你也键入搜索词,它就不会显示。
if(isset($_POST['search']))
{
if($_POST['genre']!="All")
{
$where3 = "WHERE genre.GenreID = '".$_POST['genre']."'";
}
if($_POST['field'] == "All")
{
if(str_word_count($_POST['find'])>=2)
{
$findEx = explode(' ', $_POST['find']);
$where2 = "OR authors.Forename LIKE '%".($findEx[0])."%' AND authors.Surname LIKE '%".$findEx[1]."%'";
}
$where = "
WHERE books.BookName LIKE '%".($_POST['find'])."%'
OR authors.Forename LIKE '%".($_POST['find'])."%' OR authors.Surname LIKE '%".($_POST['find'])."%'
$where2
";
}
else if($_POST['field'] == "Books")
{
$where = "WHERE books.BookName LIKE '%".($_POST['find'])."%'";
}
else if($_POST['field'] == "Authors")
{
if(str_word_count($_POST['find'])>=2)
{
$findEx = explode(' ', $_POST['find']);
$where = "WHERE authors.Forename LIKE '%".($findEx[0])."%' AND authors.Surname LIKE '%".$_POST[1]."%'";
}
else
{
$where = "WHERE authors.Forename LIKE '%".($_POST['find'])."%' OR authors.Surname LIKE '%".($_POST['find'])."%'";
}
}
$sql = "SELECT * FROM Books
JOIN bookauthor ON books.BookID = bookauthor.BookID
JOIN authors ON bookauthor.AuthorID = authors.AuthorID
JOIN bookgenre ON books.BookID = bookgenre.BookID
JOIN genre ON bookgenre.GenreID = genre.GenreID
".$where3."
".$where."
GROUP BY books.BookName
ORDER BY authors.AuthorID";
echo $sql;
}
我对这一切还很陌生,所以很抱歉,如果我的搜索代码看起来像一场噩梦,它只需要最少的代码就可以满足我的需求,尽管欢迎任何提示。
感谢所有帮助-Tom
也许
SELECT *
FROM Books
JOIN bookauthor ON books.BookID = bookauthor.BookID
JOIN authors ON bookauthor.AuthorID = authors.AuthorID
JOIN bookgenre ON books.BookID = bookgenre.BookID
JOIN genre ON bookgenre.GenreID = genre.GenreID
WHERE genre.Genre = 'Fantasy'
AND books.BookName LIKE '%$variable%' (OR authors.Forename LIKE '%$variable%' OR authors.Surname LIKE '%$variable%')
GROUP BY books.BookName ORDER BY authors.AuthorID