1

我想从我的用户表中获取标签 id 存储的数据,例如:

userid  tagid 
5036    |4815|324|                
1396    |1393|4567|                   
2676    |2669|345|2345|

我有一个 tagid 数组,如 Array ( [0] => 4815 [1] => 4567 )

需要使用 mysql where in condition like 获取数据"select * from user where tagid in ()"。是否有任何 preg_match 功能?

4

3 回答 3

1

建议您循环数组并使用喜欢附加,例如:

   $tags = array(2,4,6);
   $query = 'select * from user where ';
   foreach($tags as $i=>$tag) {
       if ($i>0) $query.=' or ';  // or and?
       $query.='tagid like "%|'.$tag.'|%"';
   }
于 2013-06-11T15:56:29.813 回答
0

你可以这样做:

$tagid = array(4815,4567);
$query = "select * from user where tagid regexp '\|("
       . implode("|", $tagid) . ")\|'";

然后您获得:

select * from user where tagid regexp '\|(4812|4567)\|'
于 2013-06-11T15:53:04.637 回答
0

因为你必须在比赛的两边都使用通配符,所以它们都差不多(我认为 regexp 在你的情况下可能会快一点)。

问题是您可能会误报,因为由于缺乏规范化,您的搜索中有可能出现子字符串。

一个例子:

Searching for %15%

Matches 915,15,150,215790

因此,您实际上应该这样做,因为在这种情况下,除非您始终将 ID 包装在管道字符中,否则 LIKE 是不够的|

<?php
    $ids = array('115','215','225');

    foreach($ids as $id){

      $query = "select * from user where tagid regexp '[^0-9]*$id[^0-9]*'";

    }

?>

此时您可以使用它:

<?php
    $ids = array('115','215','225');

    foreach($ids as $id){

      $query = "select * from user where tagid like '%|$id|%'";

    }

?>
于 2013-06-11T15:45:16.640 回答