Newsgroup: it.comp.www.php
Titolo: [mysql / php] tabelle "usa e getta" o array multidimensionali?

Ciao a tutti!
Ovviamente vi scrivo per un quesito...
Ho una query in mysql 4.1 che mi restituisce questo risultato:
codice descrizione tipo
------ ----------- ---------
      5 cane        animale
      2 bianco      colore
      1 rosso       colore
      7 gomma       oggetto
      6 verde       colore
      3 gatto       animale
      4 penna       oggetto
Il campo codice è chiave univoca.
Mysql __non__ può ordinare diversamente il recordset (questo è categorico!).
Con questo recordset dovrei scrivere tante tabelle quanti sono i tipi e 
per ogni tipo elencarne i dati:
(1) tabella tipo colore
codice descrizione
------ -----------
      2 bianco
      1 rosso
      6 verde
(2) tabella tipo animale
codice descrizione
------ -----------
      5 cane
      3 gatto
(3) tabella tipo oggetto
codice descrizione
------ -----------
      7 gomma
      4 penna
Anche se il risultato è semplice (in realtà avrò circa 300 righe e 20 
colonne) la query è veramente complessa e pesante da far eseguire al 
motore mysql.
Detto questo avrei escluso la strada di eseguire più volte la query, 
avrei quindi pensato ad alcune strade alternative da seguire:
(A) Salvo il recordset in una tabella creata al volo e poi
     opero su questi dati:
     Questa soluzione mi piacerebbe perchè mi permette di usare
     una semplice query per manipolare comodamente i miei dati.
     Purtroppo ho letto che usare e salvare dati in tabelle
     "usa e getta" è lento (però non ho capito perchè...).
(B) Memorizzo il recordset in un array di array per poi usare
     le funzioni php sugli array per ordinare e filtrare i miei
     dati (es. ordina per "tipo"  oppure  estrai quelli con
     "codice"=3).
     La struttura che otterrei sarebbe del tipo:
     $recordset = array( array( "codice" => 5,
                                "descrizione" => "cane",
                                "tipo" => "animale"),
                         array( "codice" => 2,
                                "descrizione" => "bianco",
                                "tipo" => "colore"),
                         array( "codice" => 1,
                                "descrizione" => "rosso",
                                "tipo" => "colore"),
                         ...
                         array( "codice" => 4,
                                "descrizione" => "penna",
                                "tipo" => "oggetto")
                       );
     Però le funzioni sugli array che ho trovato (array_multisort,
     array_search, array_slice, ecc.) non possono cercare / ordinare
     come descritto. Oppure sono io che non ho capito nulla...
     Oppure devo scrivere io le funzioni di cui ho bisogno...
In pratica non so che strada prendere (anche se la prima mi piace di 
più).....
Aspetto con ansia di vedere il fumo dai vostri cervelli!
Anticipatamente: grazie 1000!

 Anticipatamente: grazie 1000!
perche' non puoi ordinare direttamente nella query?
sconsiglierei le tabelle temporanee per motivi di performance..
ristruttura il db normalizzando..
$listById = $listByCat = array();
while ($row = mysql_fetch_assoc($result)) {
  $listById[$row['codice']] = $row;
  $listByCat[$row['tipo']][] =& $listById[$row['codice']];
}
echo "<pre>\n";
print_r($listById);
print_r($listByCat);
-- 
www.iuz-lab.info

 
ma se una riga occupa un 1kb avrei matrici di circa 300kb... sarà 
veramente performante usare le matrici?

      4 penna       oggetto
è la tabella oggetto
farle stampare opportunamente in php è un gioco da ragazzi.
Ma penso che la cosa sia più complessa di così e in quel caso credo che
il primo approccio possa pagare.
Ciao Gianfranzo


Il problema è che essendo una query veramente complessa vorrei eseguirla 
una sola volta e poi poter lavorare velocemente e comodamente sui dati 
ottenuti.
La soluzione che proponi tu prevede di eseguire diverse volte la query 
complessa. Dovrei allora salvarmi i dati in una tabella a parte e poi 
operare come indichi (a me risulterebbe molto comodo).
Ma è proprio vero che creare una tabella (con una struttra fissa), 
salvarci il risultato di una query e poi interrogasre i dati appena 
salvati è così poco performante? E perchè??
sono disperato!!!!!
scusate.

 veramente performante usare le matrici?
effettua dei test con degli scenari verosimili..
-- 
www.iuz-lab.info