Torna indietro   Hardware Upgrade Forum > Software > Programmazione

OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
Abbiamo partecipato all'OVHcloud Summit 2025, conferenza annuale in cui l'azienda francese presenta le sue ultime novità. Abbiamo parlato di cloud pubblico e privato, d'intelligenza artificiale, di computer quantistici e di sovranità. Che forse, però, dovremmo chiamare solo "sicurezza"
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a
Abbiamo potuto mettere le mani in anteprima sul nuovo monitor MSI dedicato ai giocatori: un mostro che adotta un pannello QD-OLED da 26,5 pollici con risoluzione 2560 x 1440 pixel, frequenza di aggiornamento fino a 500 Hz e tempo di risposta di 0,03 ms GtG
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro
DJI aggiorna la sua linea di droni ultraleggeri con Neo 2, un quadricottero da 160 grammi che mantiene la compattezza del predecessore ma introduce una stabilizzazione meccanica a due assi, sensori omnidirezionali e un sistema LiDAR
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 31-10-2013, 11:11   #1
Lwyrn
Senior Member
 
L'Avatar di Lwyrn
 
Iscritto dal: Jan 2009
Città: Verona
Messaggi: 2514
[MySQL] trovare la posizione di un record

Ho un sistema di paginazione in php e dovrei far in modo di trovare su che pagina si trovi un record con id x; considerando anche che sia l'ordinamento che la quantità di records per pagina visionabili è variabile. Non vorrei usare il metodo più esoso: parsare le pagine una ad una per trovare poi il riscontro. Vorrei usare un'unica query.
Quindi, l'idea, era quella di trovare a che posizione, sul database, il record X fosse posizionato. Poi con php fare un semplice "posizione/recordperpagina" e trovare così la pagina.
Perdendo un pò di tempo sono arrivato al punto di usare le user variables e sembra anche funzionare, finché alla query però non subentra una join!

Con una query del genere il ranking segue segue senza problemi l'ORDER:
Codice:
SET @pos=0;
SELECT * FROM
(
    SELECT id, time, @pos:=@pos+1 as pos 
    FROM table AS pt 
    ORDER by time DESC
) sub;
Mentre se aggiungo una join l'order viene praticamente ignorato e viene usato quello di default
Codice:
SET @pos=0;
SELECT * FROM
(
    SELECT id, time, @pos:=@pos+1 as pos 
    FROM table AS pt
    JOIN table2 t2 ( ... )
    ORDER by time DESC
) sub;
Che non è un gran problema nel momento di una left/right join, basta eliminarla e sarebbe uguale, ma nel momento di una inner join non si può ommettere.

Qui si può vedere qualcosa di piu "specifico": http://s11.postimg.org/bdk2cksr7/rankjoin.png

Qualche idea sul perché ? Accetti anche metodi alternativi
__________________
Le mie trattative
Lwyrn è offline   Rispondi citando il messaggio o parte di esso
Old 01-11-2013, 07:36   #2
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Forse ho capito male. Ma qualcosa tipo questo penso possa bastare. 12345 è l'id del record di cui vuoi trovare la posizione e 10 è il numero di elementi per pagina.
Codice:
select round(count(id)/10) from table where id <= 12345 order by time
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 01-11-2013, 12:49   #3
Lwyrn
Senior Member
 
L'Avatar di Lwyrn
 
Iscritto dal: Jan 2009
Città: Verona
Messaggi: 2514
No purtroppo no, sarebbe troppo semplice sennò

Se lo ordini per tempo ci può anche stare, visto che "teoricamente" gli id dovrebbero venire progressivi col tempo.
Ma metti il caso stia ordinando per titolo decrescente.
Il titolo "Zip" sarebbe il record 12345 che in questo caso starebbe in prima pagina. Però dicendo "seleziona tutti i record che hanno id inferiore a 12345" mi troverà 12345 e me lo metterà sempre in ultima pagina
__________________
Le mie trattative
Lwyrn è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2013, 13:01   #4
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Ecco. Allora in mysql credo che l'unica sia usare @variabile ecc come hai già fatto. Non c'è, che io sappia, altro modo per trovare il numero della riga.

In sostanza qualcosa tipo questo:
Codice:
set @r = 0;
select ceil(a.row_number / 15) as pagina from (select @r := @r + 1 as row_number, id from table order by time) a where a.id = 12345;
VICIUS è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI C...
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro DJI Neo 2 in prova: il drone da 160 grammi guada...
L'IA "seria" di Appian è diversa: inserita nei processi e rispetta dati e persone L'IA "seria" di Appian è divers...
Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
iPhone 17 Pro Max finalmente disponibile...
Apple, Sony, Bose, Beats, Sennheiser, CM...
Arriva il Raspberry Pi 5 da 1 GB, ma por...
Draghi scuote l'Europa: 'rischio stagnaz...
NVIDIA ha comprato azioni Synopsys per 2...
BYD domina il mercato NEV cinese: nessun...
Hong Kong sempre più aperta alle ...
E-Bike e Cyber Monday, non si scherza: s...
Un supervulcano potrebbe cambiare il fut...
Questa scheda video cinese non ha una GP...
Com'è fatto il cloud... di person...
Windows 11, l'icona per la password non ...
Stabilimento Beko di Siena: fine delle a...
Gillette City Winter Edition: la nuova m...
Ultimo giorno di Black Friday: ecco le o...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:08.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v