[英]SQL JOIN result keeps repeating
在我的数据库中,我有 3 个表: user
、 phone
和number
。 它们的结构相应地:
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)
,输出将与上图相同。 我怎么解决这个问题?
$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)
首先,您必须构建以逗号分隔的 ID。 为此,我使用在最简单的方法中找到的以下函数来 implode() 一个二维数组?
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)";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.