Domanda

Sentiti libero di modificare il titolo se sai come formulare meglio la domanda.(Anche l'etichettatura è un problema.) Il problema potrebbe essere troppo difficile in questa forma generale, quindi consideriamo un esempio concreto.

Ottieni una schermata di domande StackOverflow richiedendo /questions ?sort=newest pagina.Il collegamento alla pagina successiva porta a /questions?page=2 &sort=newest.Suppongo che lato server la richiesta venga tradotta in una query SQL con clausola LIMIT.Il problema con questo approccio è che se vengono aggiunte nuove domande mentre l'utente naviga nella prima pagina, la sua seconda pagina inizierà con alcune domande che ha già visto.(Se ha 10 domande per pagina e sono state aggiunte 10 nuove domande, riceverà esattamente lo stesso contenuto una seconda volta!)

Esiste un modo elegante per risolvere questo problema comune?Mi rendo conto che non è un grosso problema, almeno non per StackOverflow, ma comunque.

L'idea migliore che ho (oltre a memorizzare la cronologia delle richieste per client) è utilizzare /questions?answer_id=NNN formato.Il server restituisce una pagina che inizia con la risposta richiesta e inserisce l'ID della prima risposta nella pagina successiva nel collegamento alla pagina successiva.Deve esserci un modo per scrivere SQL per questo, giusto?

È come si fa di solito?Oppure c'è un modo migliore?

È stato utile?

Soluzione

Questo non può essere fatto in modo semplice.Ad esempio, l'elenco "Senza risposta" qui su StackOverflow è ordinato in base al numero di voti.Pertanto, se salvi l'ultimo ID della pagina che stai visualizzando (in un cookie, richiesta, sessione, qualunque cosa) e qualcuno vota a favore di un post mentre stai navigando nella pagina 2, la pagina 3 non è completa poiché il voto a favore è stato recentemente il post potrebbe essere stato spostato in pagina 1 o 2.

L'unico modo per farlo è caricare l'elenco completo nella sessione di qualcuno.Per favore, non...

Come già accennato, speriamo che ormai la gente sia abituata a tutto questo.

Altri suggerimenti

La maggior parte dei siti web che ho visto non risolvono questo problema: ti mostrano una pagina che include alcuni contenuti che hai già visto.

Potresti considerarla una funzionalità: quando fai clic su "Avanti" e vedi alcuni contenuti che hai già visto in precedenza, è un segnale che vuoi tornare di nuovo in primo piano perché ci sono dei nuovi contenuti.

Tagga ogni domanda con la sua ora inserita nel database, riporta l'ora in cui la prima pagina è stata caricata l'ultima volta come cookie o parte dell'URL e limita la ricerca agli elementi n Attraverso n+displaynum mentre vai avanti.

Ma non mi preoccuperei.Questo comportamento è sufficientemente uniforme da essere previsto dalla maggior parte degli utenti e funge da indicatore per quando diventano disponibili nuovi dati.Puoi anche aprire una nuova scheda/finestra che inizia dall'inizio dell'elenco per vedere cosa è successo.

Credo che l'SQL (per MySQL) sarebbe:

SELECT * 
FROM   entries 
WHERE  entry_id >= @last_viewed_entry_id 
ORDER BY entry_id 
LIMIT 50
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top