簡體   English   中英

MySQL WHERE結果基於先前的WHERE子句

[英]MySQL WHERE results based on a previous WHERE clause

抱歉,如果有一種簡單的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;
            }

我對這一切仍然很陌生,因此很抱歉,如果我的搜索代碼看起來像一場噩夢,盡管可以接受任何提示,但它用最少的代碼即可滿足我的需求。

感謝所有幫助-湯姆

也許

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM