2014-06-29 14 views
0

我開始之前,這裏是數據庫的樣本格式:在一列中搜索多個值的mysqli,返回匹配另一列,按出現次數排序?

id date   title   content 
-------------------------------------------------------------- 
1 YYYY-MM-DD some text here lots of stuff to search here 
2 YYYY-MM-DD some text here lots of stuff to search here 
3 YYYY-MM-DD some text here lots of stuff to search here 

目前,我有一些設置以獲得行的id,然後指定的日期,標題和內容,PHP變量顯示在一個頁面上的不同地方(這是一個博客,這些是帖子)。

現在我試圖做一個函數來搜索數組中每個字符串的內容(代碼已經將輸入到搜索框中的單詞按空格分割成一個數組,因此輸入cat hotdog suit將給出[0]cat [1]hotdog [2]suit)。

我有一個循環設置一個在每個字符串進行查詢:

foreach ($queryArray as $queryArrayString) { 
    // query the content column for $queryArrayString 
} 

不過,我想不出我應該使用什麼樣的查詢,找到後,該字符串的ID發生在。我想將它分配給一個變量($results)。 扭轉陣列,因此更高的IDS(更新結果)顯示第一後,我想找到每個ID的標題,並將其存儲這樣的:

id (let's say it is 3) => matching title 
id (let's say it is 1) => matching title 

這可能嗎?我已經嘗試了幾種不同的查詢,但都沒有成功,但是花了2分鐘和大量內存來嘗試。

任何幫助,將不勝感激。

編輯:我創建了標題和內容列的文本索引(我想要同時搜索),如this image所示。

可以搜索嗎?就像我在評論中所說的那樣,我只是需要它以某種方式返回相應的ID和標題。 (結果鏈接文本的標題,鏈接目標的標識爲<a href="blog?p=[id]">[title]</a>是我正在使用的格式

+0

你可以使用MySQL'LIKE'條件:'SELECT * FROM your_posts在內容LIKE '%firstword%' AND內容LIKE'%secondword%''等 –

+1

聽起來好像你需要在你的表中實現全文搜索。閱讀MySQL文檔:http://dev.mysql.com/doc/refman/5.5/en /fulltext-search.html – Barmar

+1

否則,用'LIKE'搜索大量文本將會非常緩慢。 – Barmar

回答

0

在理想的情況下,有像Apache SOLR或Elasticsearch這樣的複雜解決方案可用於索引記錄,並在多文本搜索 - 。提供了條件幸運的是,你可以嘗試這樣的事情(未測試)達到這樣的效果..

$searchTerms = "cat hotdog suit"; 
$searchArray = explode(' ',$searchTerms); 

$conditions = array(); 
$foreach (searchArray as $searchTerm){ 
    $conditions[] = 'title-content LIKE %'.searchTerm.'%'; 
} 

$query = ' 
SELECT 
    tableName.id, 
    CONCAT_WS(' ', tableName.title,tableName.content) as title-content 
FROM 
    tableName 
WHERE 
    '.implode(' OR ', $conditions); 
+0

好吧,我已經把它放入了(稍作修改),我不確定如何從中獲得結果這裏是我的完整代碼:[pastebin.com/7cD9yaFm](http://pastebin.com/7cD9yaFm)請注意,'$ q'在文檔的開始處用'<?php $ q = $ _GET [ 「q」];?>'因爲它用在其他地方 – Klikini

+0

你在哪裏執行查詢? –

+0

這就是爲什麼我不能用2小時睡眠編碼。 $ query);''''results'不會回顯,我期待得到'Array',但它什麼也沒做。 – Klikini

相關問題