2016-05-12 6 views
2

В моей базе данных У меня 3 таблицы: user, phone и number. Их структура соответственно:SQL JOIN result продолжает повторяться

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 «s, чтобы показать, например:

$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 u.id in ($selected) 
+0

Здравствуйте, спасибо за ваши откликается .. Я получил некоторую ошибку в $ selected array structure. Здесь я уже отредактировал его '$ selected = array (1, 2, 3)' :) Кстати, я попробовал ваш, и он появляется 'array_merge(): Argument # 1 не является массивом в ...' –

+0

в этом случае не используйте 1-ю строку. просто '$ selected = implode (',', $ selected); // 1,2,3 ' – splash58

+0

Я пробовал, но появляется ошибка' Unknown column '1' in 'where clause'', D: –

0

Сначала вы должны структурировать свои идентификаторы разделенным запятыми. Для этого я использую следующую функцию найденную в 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. Здесь я уже отредактировал его '$ selected = array (1, 2, 3)' :) –

+0

Тогда вы можете использовать простую функцию implode. $ ids = implode (",", $ selected). –

+0

Yup, я уже пробовал, но появляется 'Unknown column '1' in 'where clause'' –

Смежные вопросы