Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中连接mysql列值_Php_Html_Mysql_Sql_Angularjs - Fatal编程技术网

在php中连接mysql列值

在php中连接mysql列值,php,html,mysql,sql,angularjs,Php,Html,Mysql,Sql,Angularjs,我有一张像这样的桌子: client_id | name | bank | name ------------------------------------ 1 |史蒂夫|银行1 1 |史蒂夫|银行1 1 |史蒂夫|银行3 我想打印一份声明如下: 客户:史蒂夫 当前银行:银行1、银行3 这是我目前的代码。(请记住,我是在pdf模板中打印的,所以忽略php和div标记,它们是正确的。): 注意:我不能在我的sql查询中使用DISTINCT,因为模板的另一部分要求我打印所有内容,包括重复的内容

我有一张像这样的桌子:

client_id | name | bank | name
------------------------------------
1 |史蒂夫|银行1
1 |史蒂夫|银行1
1 |史蒂夫|银行3
我想打印一份声明如下:

客户:史蒂夫
当前银行:银行1、银行3
这是我目前的代码。(请记住,我是在pdf模板中打印的,所以忽略php和div标记,它们是正确的。):


注意:我不能在我的sql查询中使用
DISTINCT
,因为模板的另一部分要求我打印所有内容,包括重复的内容

select name, group_concat(distinct bank_name)
from t
group by name;

我不明白这怎么会适合你的应用程序的其余部分。我可以说,您应该在数据库中执行此处理,而不是在应用程序端使用循环。

您可以在SQL中执行此操作:

SELECT name, GROUP_CONCAT(DISTINCT bank_name) FROM table GROUP BY client_id;

您需要花费整个for循环来遍历所有可用数据。将名称收集到一个新的数组中,因为这使我们能够轻松地获得具有array_unique的unique。另一种选择是将bankNames存储为数组中的键-参见第二个示例

<?
    $currentBank = '';
    $bankNameList = [];
    foreach($data as $bank):
        $bankNameList[] = $bank->bank_name;
    }
    $bankNameList = array_unique($bankNameList);
    $currentBank = implode(', ', $bankNameList);

?>
            <div>Current bank: {{ $currentBank }} </div>
<? endfor; ?>

当前银行:{{$currentBank}
不带数组的第二个示例_unique()


当前银行:{{$currentBank}
最好的方法是使用命名的帮助函数在模板之外组织这些数据。这样,模板就不会增长到数千行未记录的行

<?

/**
 * Return all $item->bank_names
 * as comma delimited string
 */
public function concatAllBankNames($data) {

        $bankNameList = [];
        foreach($data as $bank):
            $bankNameList[$bank->bank_name]++;
        }
        return implode(', ', array_keys($bankNameList));
}

//.. in some controller
foreach ($databasedata as $row) {
  $row[ $row['username'] ]['bank_names_concat'] = $this->concatAllBankNames($row['data']);

}
//assign data to template system somehow
$template->rows = $rows;
//or
$template['rows'] = $rows;

如何使用
GROUP\u CONCAT
?请注意,您不应该在服务器端进行这种处理。如果要以不同的方式显示相同的数据,该怎么办?你是要执行另一个查询,还是仅仅操纵DOM?@草莓,你是说数据库中每个人的名字都是steve,我是说,虽然名字是steve,但做一件事。当它改变时,做些别的事情。这是循环中的一个基本操作。但这并不能解决问题。这需要在php中完成,因为该数据集在文档的其他地方使用。这也不会忽略重复项。@st3lz添加了
DISTINCT
来管理重复项。关于数据集:只需查询一个数据集,就可以得到这个列表。谢谢,这就是我要找的:)
<?
    $currentBank = '';
    $bankNameList = [];
    foreach($data as $bank):
        $bankNameList[$bank->bank_name]++;
    }
    $currentBank = implode(', ', array_keys($bankNameList));

?>
            <div>Current bank: {{ $currentBank }} </div>
<? endfor; ?>
<?

/**
 * Return all $item->bank_names
 * as comma delimited string
 */
public function concatAllBankNames($data) {

        $bankNameList = [];
        foreach($data as $bank):
            $bankNameList[$bank->bank_name]++;
        }
        return implode(', ', array_keys($bankNameList));
}

//.. in some controller
foreach ($databasedata as $row) {
  $row[ $row['username'] ]['bank_names_concat'] = $this->concatAllBankNames($row['data']);

}
//assign data to template system somehow
$template->rows = $rows;
//or
$template['rows'] = $rows;