ho messo su un po' di codice che dati dei valori in POST ed estratta una lista di campi unici nella tabella desiderata dovrebbe restituire un array con i nomi di tutti quei campi che non rispettano la prerogativa di unicita'
il codice a funzionare funziona, ma fa davvero schifo. E' rozzo, inelegante e temo sia anche molto lento, visto il numero di interrogazioni al database che richiede.
Lo posto qui, magari riuscite a darmi una mano con l'ottimizzazione
(non fate caso a $this e funzioni "ignote" sparse...sono altri "pezzi" della classe di cui il codice fa parte. Ne spiego, dove necessario, la funzione)
codice:
$chiavi = array_keys($values);
if($uniquefields = array_intersect($this->GetUniqueFieldList($table), $chiavi)){
$alreadytakenfields = array();
foreach($uniquefields as $nomecampo){
$sql = "SELECT " . $nomecampo . " FROM " . $table . " WHERE " . $nomecampo . " = '" . $values[$nomecampo] . "'";
$res = $this->MySqlQuery($sql);
if(mysql_num_rows($res)) array_push($alreadytakenfields, $nomecampo);
}
}
L'array $alreadytakenfields contiene ora tutti i campi che nn rispettano il requisito di unicità
$values è un reference a $_POST
La funzione GetUniqueFieldList($table) restituisce una lista dei campi unici nella tabella (per ricavarla interroga il database con una DESCRIBE TABLE e poi gioca coi dati trovati)
Come è piuttosto evidente il grumo è tutto in quel ciclo foreach che effettua count($uniquefields) interrogazioni al database ed è li' che vorrei "pulire" un po'.
Speravo in qualche alchimia o trucchetto direttamente nell'SQL, che conosco in modo molto elementare, che potesse aiutarmi in questa e in, presumibilmente, molte situazioni simili
se avete qualche idea...urlate pure qui!
tnx in advance