Visualizzazione risultati 1 fino 3 di 3

Discussione: Sistema gestibile con una sola query

  1. #1
    L'avatar di silverseraph
    silverseraph non è connesso AlterGuru
    Data registrazione
    27-04-2005
    Residenza
    Localhost
    Messaggi
    1,104

    Predefinito Sistema gestibile con una sola query

    Salve a tutti, ho un sistema per il cambio pagina e per l'ordinamento dei dati tramite id che necessita di due queries. Anche se non ho problema di query vorrei fare in modo di ridurre questo sistema a una sola query, è possibile?

    Ecco la parte di codice interessata:
    Codice PHP:
    if ( isset($_GET['page']) )
    $page = $_GET['page'];
    else
    $page = 1;

    $news_per_page = 14;

    $from_news = ($page-1) * $news_per_page;
    $to_news = $page * $news_per_page - 1;

    $query = "SELECT * FROM news ORDER BY id DESC LIMIT $from_news,$news_per_page;";
    $risultato = mysql_query ($query, $connessione) or die ("Impossibile eseguire la query ".$query);

    $query = "SELECT * FROM news";
    $risultato2 = mysql_query ($query, $connessione) or die ("Impossibile eseguire la query ".$query);

    $tot_news = mysql_num_rows($risultato2);
    $num_pages = ceil($tot_news / $news_per_page);

    while (
    $elemento = mysql_fetch_row($risultato) ) {
    list(
    $id,$nome,$data,$testo,$titolo,$mail,$foto) = $elemento;
    etc ...
    for (
    $i = 1; $i <= $num_pages; $i++ ) {
    if (
    $i!=$_GET["page"] )
    echo
    "<a $href_page href=\"News.php?page=$i\">";
    echo
    $i;
    if (
    $i != $_GET["page"] )
    echo
    "</a>";
    if (
    $i < $num_pages )
    echo
    " | ";
    }
    Grazie a tutti

  2. #2
    Guest

    Predefinito

    bhè...non so quanto ti convenga la cosa...dovresti usare come query
    $query = "SELECT * FROM news";
    e poi con diverse righe di codice dovresti "selezionare" i valori che verrbbero restiuti dall'altra query...sinceramente ti sconsiglio di falro...

  3. #3
    Guest

    Predefinito

    Se ho ben capito utilizzi una query per selezionare un gruppo limitato di news a partire da un offset, mentre l'altra query ti serve per sapere quante sono le news in tabella.
    Sempre se ho ben compreso la tua situazione hai una tabella che contiene una news per riga.

    In unica query selezioni tutte le righe della tabella, il risultato può essere facilmente memorizzato in un array da cui poi prelevi solo i dati che ti interessano (ad esempio dalla riga 15 alla 30).
    Il problema è che l'array è un mattonazzo non indifferente e cresce maledettamente al crescere della tabella.

    La doppia query è dal punti di vista computazionale (e dalle mei conoscenze su mysql) la migliore soluzione.
    Unica per contare il numero totale delle news c'è una query più veloce: SELECT COUNT(*) FROM news GROUP BY id;
    Ritorna il numero delle righe della tabella "news".


    EDIT: Un'idea che mi è venuta per limitare le query è questa:
    (1) la prima volta che si accede alla pagina conti il numero di righe della tabella con SELECT COUNT(*) FROM news; e salvi il numero come variabile di sessione.
    (2) fai la query per selezionare le news che vuoi.
    Le volte successive che accedi non fai più la query (1), ma solo la (2) perchè in sessione hai il numero totale delle news.

    Questo funziona bene se le news non vengono aggiornate di frequente. Comunque puoi sempre mettere un tempo di validità della variabile di sessione abbastanza basso.
    Sicuramente riduci il numero di query.


    FunCool: Non fare UP, usa il tasto Edita.
    Ultima modifica di funcool : 13-06-2006 alle ore 15.25.18

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •