2014-06-29 16 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

相关问题