-- with CONCAT() you can compose strings with entries from database -- IFNULL() is needed when the database strings within CONCAT() return NULL, -- but for instance with CONCAT(IFNULL(`characters`.`ant_ratio_mean` ,"?")) it's -- possible to create a questionmark or whatever for having no data SELECT `characters`.`id` AS 'characters_id', -- {citeID|20|Schmid 1993} CONCAT( '{citeID|',`names_authors`.`id`,'|',`names_authors`.`authors_short`,'} <!-- reference -->' ) AS 'reference', -- <img align='middle' width=200 title='Cricotopus albiforceps (mentum) Schmid 1993' src='../../species/CricCr_alfo_men_Sch1993_r.jpg' > CONCAT(`names_genera`.`name` , IFNULL(CONCAT(" (",`names_subgenus`.`name`,") ") ," "), `names_species`.`name`, "<br><img align='middle' width=", `img_width_default` , " title='",`names_genera`.`name` ," ", `names_species`.`name`, " (",`morph_attrib`.`morph_long`,") ", `names_authors`.`authors_short`, "' src='../../species/",`images`.`filename`,"' ><!-- species name --> ") AS 'species', -- antennal ratio CONCAT( IFNULL(`characters`.`ant_ratio_mean` ,"?") , IFNULL( CONCAT(' ( +- ',`characters`.`ant_ratio_variation`, IFNULL( CONCAT(', n=',`characters`.`ant_ratio_n`,')') ,')' ) ) ,'' ), '<!-- antennal ratio -->' ) AS 'antennal ratio', -- antennal blade ratio CONCAT( IFNULL(`characters`.`ant_blade_ratio_mean` ,"?") , IFNULL( CONCAT(' ( +- ',`characters`.`ant_blade_ratio_variation`, IFNULL( CONCAT(', n=',`characters`.`ant_blade_ratio_n`,')'), ')' ) ),'' ), '<!-- antennal blade ratio -->' ) AS 'antennal blade ratio', -- head ratio CONCAT( IFNULL(`characters`.`head_ratio_mean` ,"?") , IFNULL( CONCAT(' ( +- ',`characters`.`head_ratio_variation`, IFNULL( CONCAT(', n=',`characters`.`head_ratio_n`,')'), ')' ) ),'' ), '<!-- head ratio -->' ) AS 'head ratio', -- head color CONCAT( IFNULL(CONCAT('{',`head_color`,'}') ,"?"), '<!-- head color -->' ) AS 'head color', -- mentum middle TR CONCAT( IFNULL(`characters`.`men_middle_tooth_ratio_mean` ,"?") , IFNULL( CONCAT(' ( +- ',`characters`.`men_middle_tooth_ratio_variation`, IFNULL( CONCAT(', n=',`characters`.`men_middle_tooth_ratio_n`,')'), ')' ) ) , '' ), '<!-- mentum middle TR -->' ) AS 'mentum middle TR', -- mentum middle to 1.lat-TR CONCAT( IFNULL(`characters`.`men_middle-1stlat_tooth_ratio_mean` ,"?") , IFNULL( CONCAT(' ( +- ',`characters`.`men_middle-1stlat_tooth_ratio_variance`, IFNULL( CONCAT(', n=',`characters`.`men_middle-1stlat_tooth_ratio_n`,')'), ')' ) ),'' ), '<!-- mentum middle to 1.lat-TR -->' ) AS 'mentum middle to 1.lat-TR', -- mentum s-submenti lat-tooth_position CONCAT( IFNULL(`characters`.`men_s-submenti_men-lat-tooth_position_mean` ,"?") , IFNULL( CONCAT(' ( +- ',`characters`.`men_s-submenti_men-lat-tooth_position_variation`, ')') , IFNULL(CONCAT(': ',`men_s-submenti_note` ),"") ), '<!-- mentum s-submenti lat-tooth_position -->' ) AS 'mentum s-submenti lat-tooth_position', -- mandible inner CONCAT( IFNULL(`man_inner`,"?") , IFNULL(CONCAT(': ',`man_notes`),''), '<!-- mandible inner-->' ) AS 'mandible inner', -- mandible margin engraved? CONCAT( IFNULL( IF(`man_margin_engraved`<1,'no', IF(`man_margin_engraved`=1,'yes',`man_margin_engraved`) ), "?" ), '<!--mandible margin engraved?-->' ) AS 'mandible margin engraved?', -- mandible seta interna CONCAT( IFNULL( IF(`man_s-interna`<1,'no', IF(`man_s-interna`=1,'yes',`man_s-interna`) ) ,'?' ), IFNULL(CONCAT(': ',`man_s-interna_note`) ,""), '<!--mandible seta interna-->' ) AS 'mandible seta interna', -- mandible seta subdentalis CONCAT( IFNULL(IF(`man_s-subdentalis`<1,'no', IF(`man_s-subdentalis`=1,'yes',`man_s-subdentalis`)) ,'?'), IFNULL(CONCAT(': ',`man_s-subdentalis_note` ),"") , '<!--mandible seta subdentalis-->' ) AS 'mandible seta subdentalis', -- seta S1 CONCAT( IFNULL( `lab_s1`,"?"), IFNULL(CONCAT(': ',`lab_s1_note`),""), '<!--seta S1-->' ) AS 'seta S1', -- premandible CONCAT( IFNULL(`lab_n-preman_mean` ,"?"), IFNULL(CONCAT(", ",`lab_n-preman_min`, IFNULL(CONCAT('-',`lab_n-preman_max`),"")),""), IFNULL(CONCAT(', n=',`lab_n-preman_n`),""), IFNULL(CONCAT(': ',`lab_preman_notes`),""), '<!--premandible-->' ) AS 'premandible', -- premandible brush CONCAT( IFNULL(IF(`lab_preman_brush`<1,'no', IF(`lab_preman_brush`=1,'yes',`lab_preman_brush`)) ,"?"), '<!--premandible brush-->' ) AS 'premandible brush' FROM `characters`, `images`, `names_authors`, `names_valid`, `names_subgenus`, `names_genera`, `names_species`, `morph_attrib` WHERE ( (`images`.`names_valid_id` = `names_valid`.`id`) AND (`images`.`names_authors_id` = `names_authors`.`id`) AND (`characters`.`names_valid_id` = `names_valid`.`id`) AND (`characters`.`names_authors_id` = `names_authors`.`id`) AND (`names_subgenus`.`id` = `names_valid`.`subgenus_name_id`) AND (`names_genera`.`id` = `names_valid`.`genus_name_id`) AND (`names_species`.`id` = `names_valid`.`species_name_id`) AND (`morph_attrib`.`id` = `images`.`morph_id`) AND -- here a genus name has to be inserted vvv (`names_genera`.`name` LIKE '/*[VARIABLE]*/%') AND (`images`.`morph_id` =7) ) ORDER BY `names_species`.`name` ASC