Puoi fare così:
Tabella che contiene i campi "extra"
codice:
CREATE TABLE IF NOT EXISTS `pf_fields_data` (
`pf_id` smallint(5) NOT NULL AUTO_INCREMENT,
`pf_title` varchar(250) COLLATE latin1_general_ci NOT NULL DEFAULT '',
`pf_desc` varchar(250) COLLATE latin1_general_ci NOT NULL DEFAULT '',
`pf_content` text COLLATE latin1_general_ci NOT NULL,
`pf_type` varchar(250) COLLATE latin1_general_ci NOT NULL DEFAULT '',
`pf_not_null` tinyint(1) NOT NULL DEFAULT '0',
`pf_max_input` smallint(6) NOT NULL DEFAULT '0',
`pf_position` smallint(6) NOT NULL DEFAULT '0',
`pf_show_on_reg` tinyint(1) NOT NULL DEFAULT '0',
`pf_input_format` text COLLATE latin1_general_ci NOT NULL,
`pf_admin_only` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`pf_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;
così hai una struttura che accoglie la definizione dei campi extra.
Poi un'altra tabella del tipo
codice:
CREATE TABLE IF NOT EXISTS `pfields_content` (
`member_id` mediumint(8) NOT NULL DEFAULT '0',
`updated` int(10) DEFAULT '0',
`field_1` text COLLATE latin1_general_ci,
`field_2` text COLLATE latin1_general_ci,
`field_3` tinyint(4) NOT NULL DEFAULT '1',
`field_4` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`member_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
che invece raccoglie i contenuti campi extra. In questo esempio i campi extra sono 4.
Il legame lo fai semplicemente recuperando gli extra dell'utente, sapendo che field_1 corrsiponde alla definizione che ha id = 1.
Ovviamente quando aggiungi un campo extra ti tocca modificare la tabella content aggiungendo il campo "field_x".
Non è il massimo della praticità, ma ti risolve qualche problemino. Es: il campo è una select box.
Per inserire i possibili valori (ipotizzo che siano fissi, ovviamente) del tipo "uomo, donna, non dichiarato, ti basta inserire per esempio "m=Uomo|f=Donna|?=non dichiarato" in pf_content. Quando vai a recuperare il dato dell'utente, nel field_x corrispondente troverai per esempio "m" che, stante la definizione pf_content, significa "uomo".
Spero di esserti stato d'aiuto.