Kolomnamen achterhalen (MySQL)

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen

Kolomnamen achterhalen is simpel

In den beginne:

select column_name from information_schema.columns where table_name="tabelnaam";

Het resultaat kan uiteraard ook naar een tabel worden weggeschreven, in dit geval een tijdelijke tabel:

drop temporary table if exists kolomnaam_tmp
create temporary table kolomnaam_tmp select column_name 
from information_schema.columns 
where table_name="tabelnaam";

Of uitvoeren als één string - inclusief voorbeeld-output:

select group_concat(column_name) from information_schema.columns 
where table_name="amazon_de_tmp";

item_sku,external_product_id,external_product_id_type,asin,item_name_de,manufacturer,feed_product_type,
brand_name,part_number,description_de,update_delete,standard_price_de,quantity,fulfillment_latency,
condition_type,number_of_items,website_shipping_weight,website_shipping_weight_unit_of_measure,
item_length,item_width,item_height,item_dimensions_unit_of_measure,item_weight,
item_weight_unit_of_measure,recommended_browse_nodes,generic_keywords,bullet_point1,bullet_point2,
bullet_point3,bullet_point4,bullet_point5,target_audience_keywords,main_image_url,other_image_url1,
package_height,package_height_unit_of_measure,package_width,package_width_unit_of_measure,package_length,
package_length_unit_of_measure,package_weight,package_weight_unit_of_measure,color_name,color_map,
material_type,specific_uses_for_product,item_name,description,standard_price

Kolomnamen naar één record wegschrijven

Problemen, problemen

Als ik Amazon-sjablonen met productdata aan het vullen ben, moet ik de namen van de kolommen in de eerste regel vermelden. Oftewel:

  • Hoe plaats ik die kolomnamen in één record, met de juiste waarde in de juiste kolom?
  • Hoe kun je überhaupt in SQL een record dat is opgeslagen in een delimited string in een record invoegen???

En omdat een ongeluk nooit alleen komt:

  • In SQL verwijs je niet echt naar zoiets als een 'eerste' record in een verzameling
  • SQL werkt vector-georiënteerd. Het is niet bedoeld noch geschikt om veldje-voor-veldje waardes invullen in een bepaalde rij. Dan beland je snel bij het gebruik van cursors (SQL's variant van imperatief (of hoe dat heet) programmeren, wat opnieuw een teken is dat je misschien niet het juiste probleem of de juiste oplossing onder handen hebt.

INSERT INTO is alfa & omega

Zie de bronvermeldingen hieronder voor bestaande oplossingen. Regelmatig wordt gesuggereerd om dit in een scripttaal als PHP te doen, omdat SQL dit niet zomaar kan. De oplossingen die dit in SQL doen, zijn vrij complex en gekunsteld, en maken steeds weer gebruik van het INSERT INTO SQL-statement.

Mijn oplossing: Dynamisch INSERT INTO-statement

Zie ook

Bronnen