2013-07-01 4 views
1

Je prends des résultats à partir d'une base de données SQL et la sortie à un fichier CSV en utilisant le code suivant ...Fetch Array - Combiner certains résultats au format CSV

while ($row = $results->fetch_assoc()) { 
    fputcsv($handle, array(
     'admin', 
     'base', 
     'Default', 
     'simple', 
     '2', 
     $row['part_id'], 
     $row['part_id'], 
     $row['price'], 
     $row['list_price'], 
     $row['core'], 
     $row['weight'], 
     $row['height'], 
     $row['length'], 
     $row['width'], 
     $row['popularity'], 
     $row['qty'], 
     $row['description_line_two'], 
     $row['detailed_description'], 
     $row['note'], 
     $row['YearID'], 
     $row['MakeID'], 
     $row['ModelID'], 
     $row['aspiration'], 
     $row['bed_length'], 
     $row['bed_type'], 
     $row['body_num_doors'], 
     $row['body_type'], 
     $row['brake_abs'], 
     $row['brake_system'], 
     $row['cylinder_head_type'], 
     $row['drive_type'], 
     $row['engine_base'], 
     $row['engine_designation'], 
     $row['engine_version'], 
     $row['engine_vin'], 
     $row['fuel_delivery_type'], 
     $row['fuel_delivery_subtype'], 
     $row['fuel_system_design'], 
     $row['fuel_type'], 
     $row['mfr_body_code'], 
     $row['region'], 
     $row['steering_system'], 
     $row['steering_type'], 
     $row['submodel'], 
     $row['transmission_control_type'], 
     $row['transmission_num_speeds'], 
     $row['transmission_type'], 
     $row['valves_per_engine'], 
     $row['wheel_base'] 
    )); 
} 

Dans les données, il y a plusieurs cas où les l'ID de la pièce sera la même sur plusieurs lignes et les autres champs (comme l'année, la marque, le modèle) seront différents. Ce que j'espère faire est de consolider les données. En d'autres termes, lorsque le paramètre part_id est cohérent entre deux ou plusieurs lignes, j'aimerais combiner certains des autres champs (par exemple, year, make, model) en une seule ligne.

En d'autres termes, il est actuellement comme ça ...

Part ID Year Make Model 
0001  2013 Suzuki NA 
0001  2012 Acura NA 
0001  2011 Hyundai Elantra 

Je voudrais que ce soit comme ...

Part ID Year    Make      Model 
0001  2013,2012,2011 Suzuki, Acura, Hyundai NA, Elantra 

Est-ce possible? Si oui, comment pourrais-je y aller?

Je suis ouvert à un QUERY pour manipuler les données dans la base de données avant qu'il ne soit récupéré si cela aide!

+1

Pourriez-vous faire un 'group_concat' groupé par' part id' dans votre requête? – vee

Répondre

1

Quelque chose comme ça peut-être:

CREATE TEMPORARY TABLE tmp_table 
SELECT 'admin' as custom1,'base' as custom2,part_id,year... etc 
FROM original_table 
WHERE 1; 

Ensuite, vous voulez sélectionner vos affaires à partir de là, et de mettre le groupe en:

SELECT part_id, custom1, GROUP_CONCAT(year) as year 
FROM tmp_table 
WHERE 1 
GROUP BY part_id 

Pas sûr de la structure ou le groupement, mais un peu de googling et de recherche de références devrait combler les lacunes. Le concept est là, ce que vous cherchez, c'est la fonction GROUP_CONCAT de MySQL (http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html)

+0

Merci! Dans un exemple, ce qui suit est utilisé dans la requête ... SELECT id, GROUP_CONCAT (client_id) FROM services WHERE id = 3 GROUP BY id; Que faire si l'ID est dynamique? Pourrait-il simplement regrouper les doublons? –

+0

C'est là qu'intervient la création de la partie tmp_table. Vous devez vous assurer que le tmp_table capture toutes les données que vous voulez signaler. Si vous avez besoin de le construire à partir de plusieurs sources, vous pouvez le faire avant d'aller chercher avec la requête select. La concatation de groupe ne concaténera plusieurs champs que si plusieurs lignes correspondent à votre regroupement. Donc, si vous n'aviez qu'une seule ligne avec part_id, elle s'affichera normalement – elzaer