2016-05-12 102 views
2

在我的數據庫中,我有3個表格:userphonenumber。他們因此結構:SQL JOIN結果不斷重複

ID | name 
---+------ 
1 | Joe 
2 | Gin 
3 | Ash 


ID | Brand | series 
---+-----------+-------- 
1 | Samsung | s7 
2 | Iphone | 6s 
3 | Samsung | s5 


ID | number 
---+---------- 
1 | 77612 
2 | 34014 
3 | 98271 

使用JOIN我想要做的就是選擇。這裏是我的嘗試:

$query = "SELECT u.id, p.brand, n.number 
      FROM `user` u 
      LEFT OUTER JOIN `phone` p 
       ON u.id = p.id 
      LEFT OUTER JOIN `number` n 
       ON p.id = n.id 
      WHERE u.id = '$selected'"; 

$sql = mysql_query($query); 

if ($sql === FALSE) { 
    die(mysql_error()); 
} 

while ($result = mysql_fetch_row($sql)) { 
    $final[] = $result; 
    echo '<pre>'; 
    print_r($final); 
    echo '</pre>'; 
} 

哪裏$selected從表單輸入數組的數組,允許選擇什麼ID的顯示,例如:

$selected = array(1, 3); 

但結果是:

Array (
     [0] => Array (
      [0] => 1 
      [1] => Samsung 
      [2] => 77612 
    ) 
    ) 
Array (
     [0] => Array (
      [0] => 1 
      [1] => Samsung 
      [2] => 77612 
    ) 
     [1] => Array (
      [0] => 3 
      [1] => Samsung 
      [2] => 98271 
    ) 
) 

如果我們設置$selected = array(1, 2, 3),則輸出將與上面顯示的相同。我怎麼解決這個問題?

回答

1
$selected = array(array(1), array(2), array(3)); 

// make list of id from source array 
$selected = call_user_func_array('array_merge', $selected); 
$selected = implode(',', $selected); // 1,2,3 

和改變where子句

WHERE u.id in ($selected) 
+0

您好,感謝您的響應..我在$選擇的數組結構中遇到了一些錯誤。在這裏,我已經編輯它'$選擇=數組(1,2,3)':) 順便說一下,我試過你的,它似乎'array_merge():參數#1不是數組...' –

+0

在這種情況下不使用第一行。只是'$ selected = implode(',',$ selected); // 1,2,3' – splash58

+0

我試過了,但在'where子句'中出現'Unknown column'1'錯誤,D: –

0

首先,你必須構建你的IDS之間用逗號分隔。爲此我使用的Easiest way to implode() a two-dimensional array?

function implode_r($g, $p) { 
    return is_array($p) ? 
      implode($g, array_map(__FUNCTION__, array_fill(0, count($p), $g), $p)) : 
      $p; 
} 

發現下列函數,那麼你已經使用關鍵字IN改變一點點查詢:

$ids=implode_r(",",$selected); 

$query = "SELECT u.id, p.brand, n.number FROM `user` u 
LEFT OUTER JOIN `phone` p ON u.id = p.id LEFT OUTER JOIN `number` n 
ON p.id = n.id WHERE u.id in ($ids)"; 
+0

你好,謝謝你的回覆..我在$選擇的數組結構上出現了一些錯誤。在這裏,我已經編輯過它'$ selected = array(1,2,3)':) –

+0

然後你可以使用簡單的implode函數。 $ ids = implode(「,」,$ selected)。 –

+0

是的,我已經嘗試過了,但是在'where子句'中出現'未知列'1' –