我有一个包含11个表的数据库,其中9个表与用户信息表有一对多的关系.
用户表:
ID , Name , Age , phone , . .......
Run Code Online (Sandbox Code Playgroud)
在ID的基础上,关系是与例如表格的关系
User_cars
ID,User_ID(fk),Make , Model , .....
Run Code Online (Sandbox Code Playgroud)
我需要做的是将这些数据存储在CSV文件的数据库中.由于存在一对多关系,因此简单连接不起作用,因为行是重复的.(不可显示客户端的格式:S)
我使用Yii作为Web应用程序,需要一些扩展,可以用一些可读的方式呈现它.
或者也许PHP脚本也可以完成任务.
您可以通过以下两种方式之一处理它:
1.使用GROUP_CONCAT(如注释中提到的@Dave - 这是链接:MYSQL PHP API - 在另一个表的行中显示和获取多行).但是有一个缺点,GROUP_CONCAT有一个限制(默认为1024个字符),您可以使用服务器变量更改group_concat_max_len,但您可能无权访问.
这看起来很像这样:
ID | Name | Car Model | Year
1 John BMW, Audi, Renault 1999, 2000, 2003
2 David Mercedes, Ford 2000, 2005
Run Code Online (Sandbox Code Playgroud)
如果每个用户有30-40个条目,并且不可读,则会变得非常复杂.
2.第二种选择是以下列格式导出它(不难做到,你只需遍历用户拥有的所有汽车,但只在第一次迭代中写入用户).
ID | Name | Car Model | Year
1 John BMW 1999
Audi 2000
Renault 2003
2 David .....
Run Code Online (Sandbox Code Playgroud)
这是一些示例代码(我使用了大量的方法,具有暗示性的名称).
$csvArray = array();
foreach ($users as $user) {
$cars = $user->getCars(); //random method name. Grabs an array with the cars this user has :)
$firstIteration = 1;
foreach ($cars as $car) {
if ($firstIteration == 1) { // we only set the CSV row the first time we iterate through cars
$csvSingle['ID'] = $user->getId(); // more random method names
$csvSingle['Name'] = $user->getName();
$firstIteration = 0;
}
$csvSingle['car_model'] = $car->getCarModel();
$csvSingle['car_year'] = $car->getCarYear();
$csvArray[] = $csvSingle; // now we add the single row to the big CSV array.
}
}
fputcsv($handle, $csvArray); // $handle is the file you export to
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1694 次 |
| 最近记录: |