我有這個本地分類網站與MySQL數據庫,並使用PHP。 它具有這樣的房源存儲在表中,但我們將要使用的搜索僅有3列:使用短語搜索mysql數據庫
列 標題,描述,價格
什麼是搜索數據庫的最好方式,當用戶類型在一個短語,如 「相當使用移動設備20,000」
我希望能夠搜索3列,如果短語與數據庫中的任何有效匹配。我知道'%LIKE'功能,但我認爲應該有更好的方法。
我有這個本地分類網站與MySQL數據庫,並使用PHP。 它具有這樣的房源存儲在表中,但我們將要使用的搜索僅有3列:使用短語搜索mysql數據庫
列 標題,描述,價格
什麼是搜索數據庫的最好方式,當用戶類型在一個短語,如 「相當使用移動設備20,000」
我希望能夠搜索3列,如果短語與數據庫中的任何有效匹配。我知道'%LIKE'功能,但我認爲應該有更好的方法。
不喜歡使用,
你的3列
和搜索的全文定義全文索引
你可以嘗試這樣的事情
$search = 'fairly used mobile devices 20,000';
SELECT *
FROM YOUR_TABLE
WHERE column_title like '%$search%'
OR description like '%$search%'
OR price like '%$search%'
ORDER BY CASE WHEN `column_title` LIKE '%$search%' THEN 0
WHEN `description` LIKE '%$search%' THEN 1
WHEN `price` LIKE '%$search%' THEN 2
ELSE 3
END
如果你要搜索的每個字,你必須拆分與空間字符串,並添加這些也查詢
您應該用explode()
這個字符串來搜索每個單詞。另一方面,您必須爲price
設置適當的列類型,因爲20,000
不是有效的數字類型,您需要在數據庫中存儲20.000,並在php 20,000到20.000中投射,或者通過,
將字符串爆炸,而不僅僅是可用空間。
一個簡單的爆炸可以用經' '
分割字符串來完成 - 自由空間,它會爲你的變化工作,但如果用戶類型fairly, used
因爲`LIKE「%相當,%」將不會返回它不會工作所需的輸出。
我會用空字符串來展示一個簡單的代碼,只是爲了解釋邏輯,但是我希望你稍後可以通過替換不需要的字符來使搜索引擎更加智能。
<form action="" method="post">
<input type="text" name="phrase" />
<input type="submit" />
</form>
<?php
$phrases = isset($_POST['phrase']) ? $_POST['phrase'] : null;
$phrases = explode(' ', $phrases);
foreach ($phrases as $phrase) {
$queries[] = $db->query("SELECT title, description, price
FROM test
WHERE title LIKE '%$phrase%'
OR description LIKE '%$phrase%'
OR price LIKE '%$phrase%';
");
}
// managing the output should be done depending on the db library you are using
謝謝,但我只是發現全文,我認爲它會爲我工作,謝謝你的努力 – Udo
你可以嘗試如下:
$search = 'fairly used mobile devices 20,000';
list_title like '%".implode('%', explode(' ', $search))."%'
這有什麼錯'%LIKE%',也向哪個方向更好的辦法,也許如果你解釋你爲什麼都不行與%LIKE%和你希望更多的實現,我們可能會幫助 –
以及我希望搜索結果應該檢查列中的每個單詞或短語並返回適當的結果。但%喜歡不這樣做 – Udo
我不知道如果有一個函數在MySQL中可以拆分它,但你可以在PHP中做到這一點,我會嘗試格式化答案 –