Q:

Handling One to Many relations when Exporting Data into CSV

i have a database which contains 11 tables 9 of which have a one to many relation with a User Information table.
User Table:
ID , Name , Age , phone , . .......

on basis of ID the relation is with tables for e.g
User_cars
ID,User_ID(fk),Make , Model , .....

What i need to be able to do is present this data in DB in a CSV file. Since the There is a one to many relation a simple join doesnt work as rows are duplicated.(Not presentable Format for the client :S)
Im using Yii as web app and need some extension which can present it in some readable way.
or maybe a php script can do the task as well.

A:

You can handle it in one of two ways:
1. Use GROUP_CONCAT (as @Dave mentioned in the comment - this is the link: MYSQL PHP API - Displaying & Fetching multiple rows within rows from another table). 
There is a downside however, GROUP_CONCAT has a limit (by default 1024 characters), which you can change with the server variable group_concat_max_len, but you may not have access to do so.
This will look pretty much like this:
ID | Name | Car Model           | Year
1    John   BMW, Audi, Renault    1999, 2000, 2003
2    David  Mercedes, Ford        2000, 2005

This can get very complicated if there are 30-40 entries per user, and non-readable.
2. The second option is to export it in the following format (not hard to do, you just iterate through all the cars a user has, but write the user only in the first iteration).

ID | Name | Car Model | Year
1    John   BMW         1999
            Audi        2000
            Renault     2003
2    David .....

Here's some sample code (I use plenty of made up methods, that have suggestive names).
$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

