有一個問題給大家...MYSQL按數組搜索
什麼是最好的方式來搜索我的表的數組,有一個數組在表中。
EG:
$var = (1,4,7,9,14)
$Query = "SELECT * FROM business_listings WHERE category IN ($var)";
'category'
將有4,27,89,101
我怎樣才能得到這個匹配,如果在$var
中的一個號碼匹配表中的號碼之一。
有一個問題給大家...MYSQL按數組搜索
什麼是最好的方式來搜索我的表的數組,有一個數組在表中。
EG:
$var = (1,4,7,9,14)
$Query = "SELECT * FROM business_listings WHERE category IN ($var)";
'category'
將有4,27,89,101
我怎樣才能得到這個匹配,如果在$var
中的一個號碼匹配表中的號碼之一。
如果您的數據庫列是逗號分隔值列表,並且您在該列表中搜索一個值,那麼您處於不同的情況。
如果您category
列包含文本值410,406,149,152
,就像你在下面的評論,你正在尋找其category
包含152
領域,那麼你就需要使用MySQL的FIND_IN_SET()
function。
如果您必須檢查多個值,那麼您需要使用多個FIND_IN_SET
。如果您閱讀文檔,您會看到FIND_IN_SET
的第一個參數必須是單個字符串,而不是字符串列表(不能包含逗號)。改用以下內容:
$var = "401,320,152";
$items = explode(",", $var);
foreach ($items as &$i) {
$i = "FIND_IN_SET('" . $i . "', `category`)";
}
$search = implode(" OR ", $items);
unset($i);
$query = "SELECT * FROM business_listings WHERE " . $items;
這將輸出:
SELECT * FROM business_listings WHERE
FIND_IN_SET('401', `category`) OR
FIND_IN_SET('320', `category`) OR
FIND_IN_SET('152', `category`)
以上腳本將工作,即使$var
僅包含一個值。
最後,tadman提到的,因爲我們進入的查詢可能會非常棘手建立與預處理語句,你需要確保你escaping and sanitizing your input properly。舉個例子,如果$var
正在從某種程度上用戶檢索,然後你以任何方式修改它之前,你需要mysqli_real_escape_string()
逃吧:
$var = $mysqli->real_escape_string($var);
假設$mysqli
是你開的MySQLi連接。
希望這會有所幫助!
所以我的$ var現在讀取'152' 我的表讀取410,406,149,152 但它只適用於152是第一個數字。它看起來像它只看表中的第一個數字,而不是其他 如果$ var = 410它的工作 如果$ var = 152它不起作用 – lithiumdesign
啊!我想我誤解了你想要做的事情。看我的編輯。 – theftprevention
如果您要使用字符串連接撰寫查詢,請**正確地轉義**任何內容。這是一個不好的模式。 – tadman
這不適合你嗎? –
使用php數組我相信你需要使用逗號作爲delimeters的join()方法 –
聲音像你有一個反規範化的問題,你應該正常化... –