2017-01-20 109 views
1

我試圖通過在SQL查詢中排序來實現多重搜索的代碼。在Sql/php中搜索多個單詞

SELECT *, COUNT(*) as `total_ingredients` 
    FROM opskrifter as k 
    , ingredienser as i 
WHERE k.id = i.opskrifterid 
    AND i.ing_name IN ('salt', 'kommen', 'hakkede tomater', 'pasta', 'stødt chilli') 
    GROUP BY k.id 
ORDER BY COUNT(*) DESC; 

它正常工作,當我在MySQL運行該語句,但是當我試圖落實到我們的PHP搜索領域,它只是使用了我們輸入的第一個參數。

SELECT *, COUNT(*) as `total_ingredients` 
    FROM opskrifter as k 
    , ingredienser as i 
WHERE k.id = i.opskrifterid 
    AND i.ing_name IN ($vals) 
    GROUP BY k.id 
ORDER BY COUNT(*) DESC; 

$vals = "'" . str_replace(",", "', '", $searchquery) . "'"; and $searchsquery = $_POST['search']; //From the searchfield

希望你能幫助我找到什麼我缺少這裏..

謝謝!

+0

提示今天:切換到現代,明確的'JOIN'語法!編寫起來更容易(沒有錯誤),更易於閱讀和維護,並且如果需要的話,更容易轉換爲外部聯接。 – jarlh

+0

您的GROUP BY無效!不會在較新版本的MySQL上運行(除非在兼容模式下),並且在舊版本中出現不可預知的結果。一般的GROUP BY規則說:如果指定了GROUP BY子句,SELECT列表中的每個列引用必須標識一個分組列或者是一個set函數的參數! – jarlh

+0

@jarlh你能舉個例子嗎? :) –

回答

0

你只需要爆炸$vals,並加入請按照下面的代碼::

$vals = explode(',', $searchsquery); 
$vals = join("','", $vals); 
$vals = "'$vals'"; 

,並把這個$ VAL在此查詢,這將工作

SELECT *, COUNT(*) as `total_ingredients` 
    FROM opskrifter as k 
    , ingredienser as i 
WHERE k.id = i.opskrifterid 
    AND i.ing_name IN ($vals) 
    GROUP BY k.id 
ORDER BY COUNT(*) DESC; 
+0

當爆炸$ vals時出現錯誤 - 「'where子句'中的未知列'Array'」 –

+0

@jacobassoignon可以告訴我你的$ val變量逗號分隔的字符串是什麼? –

+0

$ vals =「'」。 str_replace(「,」,「','」,$ searchquery)。 「'」; –