2014-09-22 69 views
0

我正在使用PHP和mysqli从我的数据库中提取记录。
TABLE引擎= innoDB

MYSQL V5.5

假设我有这样的记录如何在搜索查询中使用PHP MySql搜索每个单词

1 |美丽的瑞士女孩|
2 |漂亮的兔子在公园|
3 |自然海|

现在,如果搜索查询是Beautiful它将返回前2条记录,但问题是,如果我搜索Beautiful anything,它将返回什么,但我想在这种情况下要显示的第2条,因为它有这个词beautiful在里面。我正在使用SELECT * FROM table WHERE name LIKE '%value%' ORDER BY id ASC作为用于搜索的mysql查询。

是否有任何其他查询或方法来实现此目的或唯一可能的选择是开发一个自定义算法。

+0

如果你能完全贴查询给到u [R面临 – Pundit 2014-09-22 11:01:42

回答

0

这将做的工作:

SELECT * FROM table WHERE name LIKE '%Beautiful%' OR name LIKE '%anything%' 

这是你必须使用OR。因此,假设你从什么地方得到的查询:

// get your query 
$query = <...somewhere....> 
// explode into words 
$words = explode(' ',$query); 
// write conditions, pay attention to security! 
foreach ($words as $word) 
{ 
    $escaped = ESCAPE($word); // depends the db extension you use 
    $conditions[] = "name LIKE '%$escaped%'"; 
} 
// combine into sql 
$sql = "SELECT * FROM table WHERE ".implode(' OR ',$conditions); 

然后你OR所有查询的话。

+0

我不知道搜索查询解决问题我们将不胜感激。这将是动态的。我刚刚给出了一个更好理解的例子。 – 2014-09-22 11:04:12

+0

我也是,我的也只是一个例子。你了解'OR'位吗? – 2014-09-22 11:09:17

+0

o是的,但为此,我必须制定一个自定义算法来首先爆炸句子,然后计算总词数,然后相应地进行查询。我的意思是我正在寻找一种更有效的方法来做到这一点。 – 2014-09-22 11:14:34

0

为了这个目的,我建议你使用Full-Text Searches。这将完全填补你的要求有关全文搜索,你可以用这个http://viralpatel.net/blogs/full-text-search-using-mysql-full-text-search-capabilities/

经过更多的细节,如果你正在使用innodb代替myisam引擎不会试图在这个环节也

http://mechanics.flite.com/blog/2014/07/08/fine-tuning-mysql-full-text-search-with-innodb/

+0

我试过,但发现引擎需要设置为'MYISAM',问题是'MYISAM'不允许外键。 – 2014-09-22 11:08:56

+0

啊,你用的是innodb? – 2014-09-22 11:09:30

+0

是的我的表引擎是'innoDB' – 2014-09-22 11:10:25