Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Ordinare array bidimensionali

    Ciao a tutti, ecco il mio problema:

    Apro un database Access e mi connetto:

    $conn = new COM("ADODB.Connection");
    $cnStr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=".
    realpath(DBNAME).";";
    $conn->open($cnStr);
    $rs = $conn->execute("SELECT * FROM ".DBTBL);


    poi estraggo soltanto i record che mi interessano e con questi ci popolo un' array bidimensionale:

    $AlphaArr = Array();
    $c=0;
    while (!$rs->EOF) {
    $AlphaArr[$c]["Title"]= $rs->Fields['Titolo']->value;
    $AlphaArr[$c]["Year"]= $rs->Fields['Anno']->value;
    $AlphaArr[$c]["Genre"]= $rs->Fields['Genere']->value;
    $c++;
    $rs->MoveNext();
    }


    Adesso ho bisogno di un output ordinato alfabeticamente prima per Title, poi per Year e poi per Genre.

    Utilizzando la funzione:

    array_multisort($AlphaArr,SORT_ASC);

    ottengo l'ordinamento solo per il primo valore (Titolo)

    Come posso ottener l'ordinamento dell' array con il secondo campo (Year) e il terzo (Genre)??

    Grazie mille.
    Fabrizio

  2. #2
    ma mettere l'ordinamento nella query è complicato?

    codice:
    "SELECT * FROM ".DBTBL." order by title asc, anno asc, genere asc"
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    ..otrebbe esserlo per chi non programma abitualmente in PHP e non ha spesso a che fare con i DB..

    Cmq ti ringrazio per la risposta.
    Una volta impostata la riga come da te suggerito:


    $rs = $conn->execute("SELECT * FROM ".DBTBL." order by title asc, anno asc, genere asc");

    come ricavo i tre output che mi servono?
    Me li ritrovo tutti e 3 gia impostati e se si, come li estraggo?
    Oppure devo fare tre execute differenti specificando a turno order by e poi recuperarli separatamente scorrendo il recordset e usando:

    $rs->Fields['Titolo']->value;


    Grazie, Fabrizio.

  4. #4
    non ho detto che devi cambiare tutto il tuo script, devi solo cambiare la query e il resto lo lasci così com'è. l'ordinamento lo fa la query
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    Ti chiedo scusa, ma adesso rileggendo il post mi sono accorto che ho dato per scontato quello che volevo dire, ma effettivamnete non si capiva molto bene.

    Quello che devo ottenere sono tre output differenti a seconda che voglia vedere i risultati ordinati alfabeticamente per 'title' oppure per 'genre' oppure per 'year'.

    Solo rileggendo ho capito di essermi spiegato male.

    Mi servono tutti e tre gli allinemaenti ma uno alla volta e separatamente, poi li devo salvare in tre file diversi e li vado a richiamare successivamente in altre pagine.

    Ti chiedo: devo ovviamente aprire tre differenti query? Giusto?
    ..e successivamente estrarrei dati e salvarli.

    A puro titolo informativo mi conviene, in termini di velocita', di piu' fare tre query su un db Access o fare una sola query e caricare tutto su un array e poi utilizzare la funzione di ordinamento dell' array nei tre modi? Considera che stiamo parlando di una tabella di circa 50Mb e di 1000 record x 3..
    Ho letto che Access non e' particolarmente performante con PHP..

    Grazie ancora.
    Fabrizio.

  6. #6
    Originariamente inviato da francypaoli
    Ti chiedo scusa, ma adesso rileggendo il post mi sono accorto che ho dato per scontato quello che volevo dire, ma effettivamnete non si capiva molto bene.

    Quello che devo ottenere sono tre output differenti a seconda che voglia vedere i risultati ordinati alfabeticamente per 'title' oppure per 'genre' oppure per 'year'.

    Solo rileggendo ho capito di essermi spiegato male.

    Mi servono tutti e tre gli allinemaenti ma uno alla volta e separatamente, poi li devo salvare in tre file diversi e li vado a richiamare successivamente in altre pagine.

    Ti chiedo: devo ovviamente aprire tre differenti query? Giusto?
    ..e successivamente estrarrei dati e salvarli.

    A puro titolo informativo mi conviene, in termini di velocita', di piu' fare tre query su un db Access o fare una sola query e caricare tutto su un array e poi utilizzare la funzione di ordinamento dell' array nei tre modi? Considera che stiamo parlando di una tabella di circa 50Mb e di 1000 record x 3..
    Ho letto che Access non e' particolarmente performante con PHP..

    Grazie ancora.
    Fabrizio.
    access non è particolarmente performante a prescindere... fai la query, metti nell'array, chiudi la connessione, e poi fai gli ordinamenti colonna per colonna ordinando l'array di volta in volta. Solo però se è una cosa da fare una tantum, altrimenti le query sono più veloci... puoi comunque fare due script che usano i due metodi e vedere chi è più veloce...
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.