2014-04-10 42 views
0

客户可以拥有3个不同的电话号码,我想根据阵列电话中的号码从数据库中检索这些电话号码。回复客户的电话号码

function statsUserRing($phone, $link) 
{ 
    $i = 0; 
    $p1 = preg_replace('/[^0-9]/', '', $phone[0]); 
    $p2 = preg_replace('/[^0-9]/', '', $phone[1]); 
    $p3 = preg_replace('/[^0-9]/', '', $phone[2]); 

    while($get_stats = $link->get_object("SELECT REPLACE(telnr,'-', '') as telnr FROM ringupp WHERE telnr LIKE '%$p1%' OR telnr LIKE '%$p2%' OR telnr LIKE '%$p3%'")) 
    { 
     $i++; 
    } 

    return $i; 

} 

我试图与一个客户,有2个电话号码登记。所以我的数组包含2个值,即这些数字。

这两个数字在我的ringupp表中出现了16次,但是当我运行上面的代码时,它将其计为204154。为什么?

+0

我会冒险猜测你的第三个电话号码是一个空字符串,所以你的最后一个子句成为'OR telnr LIKE'%%'',它将返回所有内容。 – GarethD

+0

是的,在这种情况下,第三个电话号码是空字符串。客户可以有1个,2个或3个号码。查询应该如何? – user500468

回答

1

你可以使用只有SQL来实现这一点:

SELECT REPLACE(telnr,'-', '') as telnr 
FROM ringupp 
WHERE (telnr LIKE '%$p1%' AND '$p1' <> '') 
OR  (telnr LIKE '%$p2%' AND '$p2' <> '') 
OR  (telnr LIKE '%$p3%' AND '$p3' <> ''); 
0

您需要检查空值和条件添加到基于你的查询:

$query = "SELECT REPLACE(telnr,'-', '') as telnr FROM ringupp"; 

if($p1 != null) 
    $conditions = "telnr LIKE '%$p1%'"; 
if($p2 != null) 
    if($conditions != "") 
     $conditions = $conditions + " OR "; 
    $conditions = $conditions . "telnr LIKE '%$p2%'"; 
if($p3 != null) 
    if($conditions != "") 
     $conditions = $conditions . " OR "; 
    $conditions = $conditions . "telnr LIKE '%$p3%'"; 

if($conditions != "") 
    $query = $query . " WHERE " . $conditions + ";" 
+0

@Racii Hillan:谢谢你的回答。这是唯一的方法吗?所以我不能使用OR和AND操作符? – user500468

+0

@ user500468我不确定你的意思是“我不能使用OR和AND操作符?”。我使用了上面的'OR'。你的意思是你想直接在查询中实现而不必逐个检查参数? –

0

下面是检查空值,并动态地构造一个SQL查询的方法:

function statsUserRing($phone, $link) 
{ 
    $i = 0; 
    $count = 0; 

    $p[0] = preg_replace('/[^0-9]/', '', $phone[0]); 
    $p[1] = preg_replace('/[^0-9]/', '', $phone[1]); 
    $p[2] = preg_replace('/[^0-9]/', '', $phone[2]); 

    foreach ($p as $k => $v){ 
     if (!empty($v)){ 
      if ($count > 0){ 
       $wherelogic .= "OR telnr LIKE '%$v%' "; 
      } else { 
       $wherelogic .= "telnr LIKE '%$v%' "; 
      } 
      $count++; 
     } 
    } 

    $sql = "SELECT REPLACE(telnr,'-', '') as telnr FROM ringupp WHERE ".$wherelogic; 
    while($get_stats = $link->get_object($sql)) 
    { 
     $i++; 
    } 

    return $i; 

}