Utilizzando MySQL, come faccio a query di selezione risultato rango di una riga particolare?
Domanda
Ho passato un bel po 'di tempo oggi provare varie cose, ma nessuno di loro sembra funzionare. Ecco la mia situazione, mi piacerebbe essere in grado di selezionare il rango di una riga basata su di essa la ID da una fila specificamente ordinato
Per esempio, se la mia domanda è qualcosa di simile:
SELECT id, name FROM people ORDER BY name ASC
Con risultati come:
id name 3 Andrew 1 Bob 5 Joe 4 John 2 Steve
Mi piacerebbe ottenere il rango (cosa fila finisce nei risultati) senza restituire tutte le righe e loop buttare loro fino a quando riesco a quello che voglio (in PHP).
Per esempio, mi piacerebbe scegliere il 'rango' di 'Steve' in modo che restituisca - in questo caso - 5 (non il suo id, ma il 'rango' del suo nome nella query precedente) .
Allo stesso modo, mi piacerebbe essere in grado di selezionare il rango di qualunque riga ha l'ID di 1. Per questo esempio, mi piacerebbe tornare un 'rango' di 2 (perché questo è quello che in fila conseguenza v'è un ID di 1) e niente altro.
Ho Google'd quanto più ho potuto con risultati diversi ... o avere query molto lento per le tabelle più grandi o di dover creare tutti i tipi di tabelle temporanee e variabili utente (l'ex mi piacerebbe molto per evitare , quest'ultimo suppongo posso vivere con).
Qualsiasi aiuto o intuizione sarebbe molto apprezzato.
Soluzione
SELECT p1.id, p1.name, COUNT( p2.name ) AS Rank
FROM people p1
JOIN people p2
ON p1.name < p2.name
OR (
p1.name = p2.name
AND p1.id = p2.id
)
GROUP BY p1.id, p1.name
ORDER BY p1.name DESC , p1.id DESC
LIMIT 4,1
Altri suggerimenti
Una cosa come questa?
SELECT Row, id, name
FROM (SELECT @row := @row + 1 AS Row, id, name
FROM people
ORDER BY name ASC)
WHERE Row = @SomeRowNumber
Se si vuole andare da ID, basta modificare la clausola WHERE.
Prova questo:
SELECT @rownum:=@rownum+1 `rank`, p.id, p.name
FROM people p, (SELECT @rownum:=0) r
ORDER BY name ASC
cerco di questo codice può aiutare ... altro Sto ottenendo risultati da parte degli utenti e caricare tavolo per pic profilo utente e unisco esso che dopo sto calcolando punti utente e smistamento su di loro. Finalmente sto controllando e l'aggiunta di numero di riga per classifica per gli utenti ... InJoy esso. grazie
set @row_num = 0;
set @calp =0;
select if(@calp=(@calp:=user.cal_points), @row_num, @row_num := @row_num + 1) as row_number,user.* from
(select user_skills.*,users.username,upload.file_name from user_skills join users on user_skills.user_id=users.id join upload on upload.upload_id=users.profile_pic order by user_skills.cal_points desc) as user
WHERE user.skill_name LIKE '%ph%'