Salve a tutti!
Sto creando la mia classe per l'astrazione al database, ma purtroppo ho alcuni problemi.
Ho già creato una classe che oggettizza le funzioni per la creazione di alcune query in PHP in sistemi OOP $query->select()->where()->limit()->execute(), ed ora sto creando il vero e proprio gestore delle query che le esegue e ritorna i dati come array.
A questo punto la query che eseguo è questa:
Codice:
SELECT * FROM `site_animes` AS `Anime` LEFT JOIN `forum_users` AS `User` ON `Anime`.`user_id` = `User`.`user_id` LEFT JOIN `site_anime_producers` AS `AnimeProducer` ON `Anime`.`producer_id` = `AnimeProducer`.`id`
Ed il risultato che mi fornisce il codice attuale è il seguente:
Codice:
[0] => Array
(
[Anime] => Array
(
[id] => 0
[name] => 1
[user_id] => 2
[producer_id] => 3
)
[User] => Array
(
[user_id] => 4
[user_type] => 5
[group_id] => 6
[user_permissions] => 7
[user_perm_from] => 8
[user_ip] => 9
[user_regdate] => 10
[username] => 11
[username_clean] => 12
[user_password] => 13
[user_passchg] => 14
[user_pass_convert] => 15
[user_email] => 16
[user_email_hash] => 17
)
[AnimeProducer] => Array
(
[id] => 84
[name] => 85
)
)
[1] => Array
(
[Anime] => Array
(
[id] => 0
[name] => 1
[user_id] => 2
[producer_id] => 3
)
[User] => Array
(
[user_id] => 4
[user_type] => 5
[group_id] => 6
[user_permissions] => 7
[user_perm_from] => 8
[user_ip] => 9
[user_regdate] => 10
[username] => 11
[username_clean] => 12
[user_password] => 13
[user_passchg] => 14
[user_pass_convert] => 15
[user_email] => 16
[user_email_hash] => 17
)
[AnimeProducer] => Array
(
[id] => 84
[name] => 85
)
)
)
Codice PHP:
/*
// fetchAll()
// Return all rows as array.
NOTA CHE $this->sql_object si riferisce ad una mysql_query()
*/
function fetchAll(){
if(!$this->sql_fetched_data){
$result_array=array();
$num_fields = mysql_num_fields($this->sql_object);
$result_fields = array();
for($idx = 0; $idx < $num_fields; $idx++){
$field_table = mysql_field_table($this->sql_object, $idx);
$field_name = mysql_field_name($this->sql_object, $idx);
if(!isset($result_fields[$field_table])){ $result_fields[$field_table] = array(); }
$result_fields[$field_table][$field_name] = $idx;
}
while($row=mysql_fetch_array($this->sql_object)){
$result_row = array();
foreach($result_fields as $key => $result_fields_row){
$result_row[$key] = array();
foreach($result_fields_row as $keyb => $field){
$result_row[$key][$keyb] = $field;
}
}
$result_array[] = $result_row;
}
$this->sql_fetched_data = $result_array;
}
return $this->sql_fetched_data;
}
Ora, il problema maggiore sta nella pesantezza del codice. Solo per eseguire quelle due query lì impiega 0.28 secondi di media, se sostituisco il mio codice con una semplice mysql_fetch_assoc scendiamo a 0.03 secondi.
La mia domanda è: Come posso alleggerire il tutto? Al limite riesco a farlo dal lato MySQL?
Ciao,
Mattia.