Pero' ho finalmente capito io i tuoi dubbi.... andiamo con ordine.
mettiamo che il valore cercato sia un id invece di un timestamp.
in questo modo a partire dal riferimento 50 andremo a prendere il primo minore, il 50 se esiste, ed il primo maggiore.codice:(SELECT pippo FROM ctabella WHERE id < '50' // qui prendiamo tutti i minori di 50 order by pippo desc // qui li ordiniamo in modo discendente limit 1) // qui prendiamo solo il primo dell'ordinamento // potrebbe essere il 49 UNION (SELECT pippo FROM ctabella WHERE id >= '50' // prendiamo il 50 se esiste e maggiori order by pippo asc // qui li ordiniamo in modo ascendente limit 2) // prendiamo i primi due ordinati // potrebbero essere se ci sono 50 e 51
Nel caso non esista il 50 prenderemo i due subito maggiori. Qui si potrebbe scegliere se mancando il 50, prendere i due minori invece dei due maggiori... basterebbe solo portare il valore = nella prima parte della UNION...

Rispondi quotando