PHP& MySql Join重复该值

时间:2014-11-04 08:44:36

标签: php mysql

我有两张桌子

(1) Table Names
      (1) id
      (2) name

(2) Table Numbers
    (1) id
    (2) userid
    (3) number
     

查询:

$GrabNumbers = mysql_query("SELECT name,number FROM Names
JOIN Numbers ON 
Numbers.useid = name.id");

当我加入表格时,它会重复名称,如:

  约翰:+1 508 078 1540
  约翰:+1 087 540 4508

我需要的是:

 john : +1 508 078 1540
      : +1 087 540 4508

3 个答案:

答案 0 :(得分:0)

是的,这就是MySQL所做的。如果你不想在输出中重复它们,你需要创建一个PHP脚本来正确输出它们。

这样的事情:

$printed = array();
foreach( $rows as $row ) {
  if( isset ( $printed[ $row['name'] ] ) ) {
    // print only the number
  }
  else {
    // print both number and name

    // then, add the name to the list of names already printed
    $printed[$row['name']] = true;
  }
}

并确保按名称订购行!否则,您可能会得到不可预测(和错误)的结果。

答案 1 :(得分:0)

不完全符合您的要求,但您可以使用GROUP_CONCAT()列之前的name功能分组。 (SQL只回答;不知道PHP)

select n.name,
group_concat(distinct nu.numbers SEPARATOR ':')
FROM `Names` n
JOIN `Numbers` nu ON 
nu.userid = n.id
group by n.name

答案 2 :(得分:0)

$GrabNumbers = mysql_query("SELECT name,number FROM Names
JOIN Numbers ON 
Numbers.useid = name.id");
$name = '';
while($row = mysqli_fetch_assoc($GrabNumbers)){
   if($name == '' OR $name != $row['name']){
      echo $row['name'] . ' : ' . $row['number'];
   }
   else{
       echo ' : ' . $row['number'];
   }
    $name = $row['name'];
}