左连接上的左表行不同

时间:2014-03-03 15:44:51

标签: mysql sql left-join

我需要在左连接上区分左表行。

而不是这个

|  name  |  last name  |  phone  |
|--------|-------------|---------|
|  name1 |  lastname1  | 1234567 |
|--------|-------------|---------|
|  name1 |  lastname1  | 2345678 |
|--------|-------------|---------|
|  name2 |  lastname2  | 3456789 |

我需要这个

|  name  |  last name  |  phone  |
|--------|-------------|---------|
|  name1 |  lastname1  | 1234567 |
|        |             | 2345678 |
|--------|-------------|---------|
|  name2 |  lastname2  | 3456789 |

我尝试使用SELECT DISTINCT但没有成功...... 我还尝试了一个GROUP BY,但它隐藏了第二行

3 个答案:

答案 0 :(得分:1)

您需要GROUP_CONCAT

  

此函数返回字符串结果,其中包含来自组的连接非NULL值。

所以,你的代码将是:

  SELECT name, 
         last_name, 
         GROUP_CONCAT(phone) AS phones
    FROM table1
GROUP BY name, last_name;

答案 1 :(得分:1)

使用GROUP_CONCAT()但请注意,它的字符长度限制为1024默认值,但可以增加

SELECT name, 
last_name, 
GROUP_CONCAT(DISTINCT phone SEPARATOR ' ')
FROM table1 
GROUP BY name, last_name

See fiddle Demo

答案 2 :(得分:1)

马里亚诺,在你关闭的WP职位上跟着你。

<?php
$results = your_sql_query_here();
$data = array();

foreach( $results as $result ) {
    // Make a new array node for each name
    if ( ! isset( $data[$result['name']] )
        $data[$result['name']] = array();

    $data[$result['name']][] = $result['phone'];
}

这会给你这样的东西

Array(
    ['name1'] => Array(
        [0] => 5123451,
        [1] => 5123452
    ),
    ['name2'] => Array(
        [0] => 5123453,
        [1] => 5123454
    ) )

然后,您可以使用密钥作为$data值,对name1数组进行for循环。

或存储整个数据集

<?php
$results = your_sql_query_here();
$data = array();

foreach( $results as $result ) {
    // Make a new array node for each name
    if ( ! isset( $data[$result['name']] )
        $data[$result['name']] = array();

    $data[$result['name']][] = $result;
}

现在您将可以访问所有节点,但按name分组。

Array(
    ['name1'] => Array(
        [0] => Array( 'name' => 'name1', 'phone' => 4165123, 'another_field' => 1 ),
        [1] => Array( 'name' => 'name1', 'phone' => 4165157, 'another_field' => 0 ),
        [1] => Array( 'name' => 'name1', 'phone' => 4225157, 'another_field' => 0 )
    ),
    ['name2'] => Array(
        [0] => Array( 'name' => 'name2', 'phone' => 4165123, 'another_field' => 1 ),
        [1] => Array( 'name' => 'name2', 'phone' => 4572321, 'another_field' => 1 ),
        [1] => Array( 'name' => 'name2', 'phone' => 5235157, 'another_field' => 0 )
    ) )