在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;