Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Random, mysql e divisione in pagine..

    Salve a tutti ho un quesito che mi sta facendo diventare scemo..

    ora vi spiego..
    devo stampare una lista di record in modo casuale e fin qui tutto k infatti con questa query risolvo il problema (SELECT * FROM tabella ORDER BY RAND()) e funziona perfettamente..

    il mio problema è che dovrei dividere la lista in più pagine.. per dire.. dalla query qui sopra ho in risultato 50 records, e vorrei visualizzarne 10 per pagina.. come faccio??

    cioè.. se alla pagina successiva rieseguo la query.. ovviamente il server mysql mi restituirà un risultato differente dalla prima e quindi mi ingavino..

    io avevo pensato ad una soluzione..

    Codice PHP:
    // Ho 10 campi e ne prendo uno a caso
    $nomecampo mysql_field_name(rand(010));
    // Prendo a caso anche la direzione
    if (rand(0,1) == 0) { $direzione_ordine "DESC"; } else { $direzione_ordine "ASC"; }
    // Faccio la query
    $query "SELECT * FROM tabella ORDER BY $nomecampo $direzione_ordine";
    // Ed infine mi passo la query tramite sessione
    $_SESSION['passami_query'] = $query
    in questo modo risolvo il problema però mi chiedevo.. ma sarà possibile che non è possibile fare una cosa del genere in modo più leggero e magari fatta totalmente in server sql??

  2. #2
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    nella prima query recupera gli id e mettili in un array

    per le pagien seguenti mandi in get i 10 articoli successivi

    pag. 1 <a href="list.php?1=10&2=30&3=5&4=9 ecc....">

    nella pagina list.php

    $qry="SELECT * FROM tabella WHERE ";
    $list=array();
    for ($x=1;$x=10)
    {
    $list[].="ID={$_GET[$x]}";
    }

    $qry_str=implode (" AND ",$list);

    $qry .= $qry_str.";";

    echo $qry; // controlla sempre la query prima di lanciarla
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  3. #3
    :master:

    quello che mi scrivi mi risulta macchinoso..
    ma sarà possibile che uno per avere dei risultati random deve fare una cosa così macchinosa??

    nella prima query recupera gli id e mettili in un array

    per le pagien seguenti mandi in get i 10 articoli successivi

    pag. 1 <a href="list.php?1=10&2=30&3=5&4=9 ecc....">

    nella pagina list.php
    Codice PHP:
    $qry="SELECT * FROM tabella WHERE ";
    $list=array();
    for (
    $x=1;$x=10) {
      
    $list[].="ID={$_GET[$x]}";
    }

    $qry_str=implode (" AND ",$list);

    $qry .= $qry_str.";";

    echo 
    $qry// controlla sempre la query prima di lanciarla 
    nel caso in cui avessi 1000 records salta fuori il problema che al max l'url deve essere al max di 255 caratteri.. (se non ricordo male)
    come mi dici te la prima volta che un'utente mi chiede la pagina faccio la query random e poi alle pagine successive gli devo passare gli id degli altri 1000 records

  4. #4
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    tu nn volevi 10 risultati?

    se la query è random, non hai punti d' appoggio per recuperare la struttura della prima query, a meno che non usi la sessione e immagazzini i dati li dentro
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  5. #5
    faccio una precisazione.. che prima non avevo visto..
    tu mi ha scritto
    nella prima query recupera gli id e mettili in un array

    per le pagien seguenti mandi in get i 10 articoli successivi
    ok mi può star bene che mi faccio una lista di tutti i record e li metto in un'array.. e spedisco solo i 10 records della pagina successiva.. ma se dopo ho un'altra pagina??
    mi porto dietro la lista dei records, faccio scorrere il puntatore che è nell'array fino all'ultimo valore e parto da quello dopo e riscrivo il link per la pagina successiva???

    argh..

  6. #6
    lol abbiamo scritto assieme.. aspetta che ti scrivo bene cosa voglio fare

    entro nella lista
    Codice PHP:
    if ($_GET['page'] > 1) {
      
    // qui dovrei fare qualcosa.. ma va a capire in ogni caso dovrei sempre recuperare il risultato precedente
      // o che mi riprendo la query sopra o che mi passo il $res tramite sessione
    } else {
      
    $query "SELECT * FROM tabella ORDER BY rand()";  // scusa.. ho editato.. l'avevo fatta al contrario :P
    }

    $rec_Start = ($_GET['page'] * RISULTATI_PER_PAGINA);
    $rec_Stop = ($_GET['page'] * RISULTATI_PER_PAGINA) + RISULTATI_PER_PAGINA;
    $query .= " LIMIT $rec_Start$rec_Stop";

    $res mysql_query($query); 
    questo è quello che più o meno devo fare.. spero di essere stato un pochino più chiaro..

  7. #7
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    si hai ragione, il bug c'è .. però a questo punto mi viene in mente un' altra soluzione...

    potresti usare dei campi hidden...

    mi spiego:

    Codice PHP:
    $num_x_pag=10;

    $res=mysql_query('SELECT ID FROM tabella ORDER BY RAND();');

    $ID=array();
    while (
    $out=mysql_fetch_array($res)) $ID[]=$out;

    //ora ho l' array $ID con tutti gli ID nell' ordine della query random

    $pages=array_chunk($ID,10);

    foreach (
    $pages as $key=>$page)
    {
    $data=implode("_",$page);
    echo 
    "<input type=\"hidden\" name=\"$key\" value=\"$data\">";

    devo però utilizzare il tag form

    sennò la sessione e non se ne parla piu
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  8. #8
    ma scusami una cosa.. perchè passarsi tutti gli id in questo modo??

    ma non mi crea casino?? cioè.. metti conto che io arrivo a 1000 record.. considerando la stringa

    <input type="hidden" name="" value="">

    la stringa qui sopra è di 38 caratteri.. più da considerare i valori che di media saranno 2 caratteri a testa quindi verranno 42 caratteri per valore.. e quindi da scrivere nelle pagine almeno 42k di codice html solo per poter vedere dei record?? a quel punto glieli faccio stampare tutti.. e poi non è esoso per il server fare un migliaio di cicli per semplicemente avere lo stesso ordine nelle pagine??

    a quel punto non mi conviene fare una cosa come ho fatto io all'inizio??

    mi faccio un paio di righe che mi fanno l'ordinamento secondo dei campi presi a caso.. e mi passo semplicemente la query come variabile di sessione??

  9. #9
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    è un compromesso a mio parere che devi raggiungere....

    faccio qualcosa ad hoc o mi studio un sistema per renderlo "universale"??

    come ti ho detto io, quando non sono troppi dati da gestire potrebbe anche andare bene... ma se devi pensare in grande, allora pensa ad una struttura diversa. se fossero 1000 records, anche la sessione diventerebbe impegnativa per la memoria del server....
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  10. #10
    nel codice qui sotto se vedi l'unica cosa che passo è la query..

    Codice PHP:
    // Ho 10 campi e ne prendo uno a caso
    $nomecampo mysql_field_name(rand(010));
    // Prendo a caso anche la direzione
    if (rand(0,1) == 0) { $direzione_ordine "DESC"; } else { $direzione_ordine "ASC"; }
    // Faccio la query
    $query "SELECT * FROM tabella ORDER BY $nomecampo $direzione_ordine";
    // Ed infine mi passo la query tramite sessione
    $_SESSION['passami_query'] = $query
    io volevo una soluzione simile..

    c'è un metodo alternativo oltre che prendere i campi e ordinarli singolarmente (come ho fatto qui sopra).. per dire.. so che in asp è possibile passare delle variabili così come sono ad un'altra pagina.

    Per dire ho una pagina con la prima pagina di record, e in fondo ho un link che mi porta alla seconda pagina dei record, questo link mi lascia sempre la stessa variabile $result in modo che nella seconda pagina non faccio altro che continuare quello che ho fatto nella prima pagina (sarebbe bello )

    scusate se rompo così.. ma volevo evitare di fare cose non utilizzabili in futuro.. :|

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.