我試圖創建一個搜索功能,通過書名,書籍作者,書籍ISBN或通過關鍵字(通過內部連接複合表連接到書籍)進行搜索。我沒有得到我期待的結果;搜索多個條件的內部連接
取決於我搜索我得到這兩種結果:
- 它有時會返回重複的結果,如果搜索詞e.g出現在書的標題和關鍵字名稱列。如果我在書名和該書的加入關鍵詞上出現「hulk」和「hulk」字樣,它將返回同一書兩次等。
- 它只搜索關鍵字表並忽略其他「 OR WHERE「條款來搜索其他指定的列。
我已經嘗試了 「SELECT DISTINCT ..」 SQL語句,但仍然在數據庫無法正常工作
表:
書表//書信息是商店
CREATE TABLE IF NOT EXISTS books ( book_id` int(11) NOT NULL AUTO_INCREMENT, book_title` varchar(100) NOT NULL, book_author` varchar(100) NOT NULL, book_ISBN` varchar(100) NOT NULL, book_description` varchar(1000) NOT NULL, book_price` double NOT NULL, book_image` varchar(100) NOT NULL, book_stock_quantity` int(11) NOT NULL, PRIMARY KEY (`book_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=61 ;
Book_keyword表//這張表是書籍分配關鍵字的地方
CREATE TABLE IF NOT EXISTS books_keyword ( books_keyword_book_id` int(10) NOT NULL, books_keyword_keyword_id` int(10) NOT NULL, KEY `BOOK_FK` (`books_keyword_book_id`), KEY `KEYWORD_FK` (`books_keyword_keyword_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
關鍵字表
CREATE TABLE keyword ( keyword_id` int(10) NOT NULL AUTO_INCREMENT, keyword_name` varchar(50) NOT NULL, PRIMARY KEY (`keyword_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
/// PHP代碼/////
$search = $_POST["Search"]; // get text from textbox and insert into variable
$mysqli = new mysqli('localhost', 'root','','bookstore'); //connect to database
$searchSQL = "SELECT books.*, books_keyword.books_keyword_keyword_id AS keyword_id, keyword.keyword_name FROM books JOIN books_keyword ON (books.book_id = books_keyword_book_id) JOIN keyword ON(books_keyword.books_keyword_keyword_id = keyword_id) WHERE keyword_name LIKE '%" . $search . "%' OR book_title LIKE '%" . $search . "%' OR book_ISBN LIKE '" . $search ."' OR book_author LIKE '%" . $search ."%'";
$Results = $mysqli->query($SearchSql); //run sql
while($SearchRow = $Results->fetch_assoc()) //print out each result
{
echo '<P>'.$SearchRow["book_title"].'</P>'; //echo book title in the search results
}