选择列文本包含数组值的行

时间:2011-03-26 13:08:27

标签: php mysql regex arrays match

我正在php / mysql中构建搜索功能,我正在寻找合适的MySql函数。我的表看起来像这样:

id    | text
-------------------------------------- 
1     | I like pony's.
2     | Do you like fish?
3     | We like fishes!

我想在列'text'中搜索一个数组的确切值,例如:

$search_array = array('fish','dogs','cat','panda');

我正在寻找合适的MySql函数来仅返回第二行(使用当前数组)。该数组可以包含数百个值。

我有6000多行,每天以+/- 400的速度增长。我已经尝试了REGEXP但是使用了大型数组,它返回相应的行之前花了大约10秒钟。

请帮帮忙,我现在已经和你打了差不多整整3天......提前致谢!

4 个答案:

答案 0 :(得分:1)

如果搜索数组是常量,或不经常更改,我建议另外两个表,'tags'和'tags-text'。

例如,示例中id为2的行包含fish,因为fish在我们的“tags”表中,新记录将放在“tags-text”表中。当您使用数组进行搜索时,可以搜索其中一个数组组件是否位于“tags-text”表中,并加入“text”表并返回text和id并执行您需要的操作。

其他表的结构:

'tags'表

id    | tags
-------------------------------------- 
1     | fish
2     | dogs
3     | cats

'tags-text'表

text-id  | tags-id
-------------------------------------- 
2        | 1

这是否有帮助/有意义

答案 1 :(得分:0)

好的我认为我找到了最简单的解决方案:让PHP创建mysql查询并使用WHERE LIKE解决它。

$search_array = array('fish','dogs','cat','panda');

$string = '';

foreach($search_array as $term) {
    $string = $string."text LIKE '%".$term."%' AND ";
}

foreach循环的结果是:

"text LIKE '%fish%' AND LIKE '%dogs%' AND LIKE '%cat%' AND LIKE '%panda%' AND "

现在让我们删除该字符串的尾部并编写查询:

$string = substr($string, 0, -5); // removing " AND " at the end of the string

$query = "SELECT * FROM table WHERE $string";
$results = mysql_query($query);

感谢其他答案:)

答案 2 :(得分:-1)

好吧,也许你应该尝试将mysql和php混合一下。 这是伪代码

select 100-1000 rows at one time from db
   use strpos to check each element in your array against the text column
       if element found 
           store it 
           if 2 elements found break the loop
       else 
           continue 

答案 3 :(得分:-1)

这样的事可能......

$search_term = implode(",",$search_array);
SELECT * FROM your_table WHERE text IN ($search_term)";