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

    [MySQL] lista paginata e ricerca pagina di un dato id

    Supponete di avere una lista paginata di records, che viene prodotta con una select dotata di clausola limit e di clausola order by.

    Supponete che vi si chieda:

    In quale pagina risiede il record che ha id = x ?

    Lo scopo, per intenderci, è quello di permettere, vedendo una lista richieste di materiale inserite dagli utenti, di cliccare sul nome dell'utente che ha fatto la richiesta ed essere portati alla lista degli utenti, ma nella pagina che contiene effettivamente l'utente richiesto.

    Per ora ho risolto in modo molto brutale, facendo un'altra query separata, che usa la orderby ma non la limit, della sola chiave e poi ciclando su tutti i record restituiti finchè trovo la chiave che mi interessa, contando quanti record ho skippato per sapere in che pagina mi trovo...

    Ma è un metodo BRUTALE!

    Nessuno ha un'idea migliore? Devo basarmi su PHP 5 e MySQL 4.1, non posso usare MySQL 5 che, avendo le stored procedures, mi permetterebbe di risolvere lato server db.

    Ogni idea è la benvenuta!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  2. #2
    up
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  3. #3
    Ti vorrei rendere il favore del router, ma non ho capito bene il problema.

    Tu dici:
    Lo scopo, per intenderci, è quello di permettere, vedendo una lista richieste di materiale inserite dagli utenti, di cliccare sul nome dell'utente che ha fatto la richiesta ed essere portati alla lista degli utenti, ma nella pagina che contiene effettivamente l'utente richiesto.
    Non ho capito, cliccando sul nome dell'utente non dovrebbe restituirmi una scheda del singolo utente? Tu invece cosa vorresti ottenere?

  4. #4
    Utente di HTML.it L'avatar di chris
    Registrato dal
    Sep 1999
    Messaggi
    1,568
    Originariamente inviato da skidx
    Non ho capito, cliccando sul nome dell'utente non dovrebbe restituirmi una scheda del singolo utente? Tu invece cosa vorresti ottenere?
    Se ho capito bene ha una lista (mettiamo caso fatta da 100 utenti) e uno script che la mostra paginata (mettiamo caso 10 per pagina). Cliccando su ogni utente vuole andare alla pagina della lista degli utenti in cui è visualizzato quell'utente (se è il 45esimo la pagina da mostrare è la quinta).

    Se quanto ho scritto è corretto io risolverei facendo una query con COUNT() per sapere quanti sono gli utenti precedenti e in base a quello capire in che pagina si trova l'utente.

    Ma magari ho preso fischi per fiaschi :E

  5. #5
    [Semi-OT]: Chris, hai letto quello che ti ho scritto nel thread sul Mysql 5? Secondo me c'è un errorino nell'articolo

    La tua soluzione va bene se la query la fai solo per singolo utente, ma io ho capito che lui voglia farla a monte in modo che già il link dell'utente punti all'opportuna pagina.

    Ad esempio

    Pippo (http://miosito.com/utenti.php?page=3#utente15)
    Pluto (http://miosito.com/utenti.php?page=3#utente18)
    Ziocannibale (http://miosito.com/utenti.php?page=9#utente24)

    Quindi fare una query come quella che dicevi per ogni nome in lista non è conveniente.

  6. #6
    Se non hai problemi di spazio, e facendo l'ipotesi che l'inserimento / cancellazione / modifica del nome di un utente sia un'operazione non troppo frequente,
    si risolve facilmente aggiungendo un campo "posizione" nella tabella degli utenti.
    Con quell'unico numero sei in grado di calcolare la pagina di visualizzazione nella lista.

    Ora penso a qualcos'altro comunque...

  7. #7
    Utente di HTML.it L'avatar di chris
    Registrato dal
    Sep 1999
    Messaggi
    1,568
    Originariamente inviato da skidx
    [Semi-OT]: Chris, hai letto quello che ti ho scritto nel thread sul Mysql 5? Secondo me c'è un errorino nell'articolo

    Quindi fare una query come quella che dicevi per ogni nome in lista non è conveniente.
    [OT] No, vado a vedere :E

    Per questo thread invece aspetterei il ritorno di shores per capire meglio la situazione

  8. #8
    Se esiste una paginazione si presume esistano i valori di "LIMIT $da, $a" dove $da sara' stato calcolato e $a sara' un numero prefissato di record.

    Quindi nel link dovrebbe essere sufficiente passare il valore $da utilizzato nella query per popolare la pagina dove esiste l'utente interessato.

    Pippo (http://miosito.com/utenti.php?da=$da)

    Sempre che sia questo il problema.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    Scusate, ero fuori con amici.

    Ora vi rispiego bene, in modo chiaro, facendo un esempio.

    Supponete di avere due liste paginate, una contiene gli utenti, l'altra le loro richieste; entrambe le liste possono venire ordinate in modo arbitrario, cliccando sulle intestazioni delle colonne; qualsiasi soluzione deve quindi tenere conto del fatto che l'ordinamento può variare.

    Nella lista delle richieste c'è quindi un campo che contiene l'id dell'utente che ha fatto la richiesta stessa, e già ora faccio una join per fare vedere il nome dell'utente e non il suo id.

    Vorrei fare in modo che il nome dell'utente fosse un link, ma non all'utente specifico, piuttosto invece alla pagina corretta della lista utenti che contiene l'utente in questione, ma, appunto, la lista utenti stessa ha un ordinamento che può cambiare nel tempo, per cui, se non sbaglio, la soluzione di chris (usare count) non è praticabile (qualunque conteggio io possa fare non dipende dall'ordine in cui vedo i record, per definizione), quella di skidx non ha senso perchè l'ordinamento della lista utenti è dinamico e quindi non posso memorizzarlo in un campo, mentre quella di piero.mac... non è una soluzione: è proprio il valore $da che tu dici di inserire nel link che sto cercando di ricavare! Se lo sapessi ricavare, è chiaro che sarebbe sufficiente passarlo alla pagina che visualizza gli utenti...

    Sono stato più chiaro?

    A mio vedere una stored procedure potrebbe risolvere, perchè potrebbe passare rapidamente in rivista i record restituiti dalla mia select, finchè non trova quello cercato, restituendomi il numero di record che ha dovuto passare, che è poi far fare al DB quello che sto facendo io ora, ma come vi dicevo, ho solo MySQL 4.1, il che significa niente stored procedures.

    Altre idee?

    Grazie comunque anche solo per non aver abbandonato il mio thread alla solitudine!!!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  10. #10
    Quindi se ho capito bene, tu vorresti per esempio che a partire da una paginazione ordinata per utente fosse possibile cambiare il tipo di ordinamento cliccando sull'intestazione di una qualsiasi colonna.

    La nuova pagina deve presentare i record non della paginazione precedente, ma di una nuova lista basata sulla scelta di ordinamento effettuata cliccando sull'intestazione in cui pero' compaia l'utente prescelto.

    E' una interpretazione corretta?

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.