2014-04-10 87 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; 

}