我需要在左连接上区分左表行。
而不是这个
| 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,但它隐藏了第二行
答案 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
答案 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 )
) )