En utilisant MySQL, comment puis-je sélectionner rang des résultats de la recherche d'une ligne particulière?
Question
J'ai passé pas mal de temps aujourd'hui d'essayer différentes choses, mais aucun d'entre eux semblent fonctionner. Voici ma situation, je voudrais être en mesure de choisir le rang d'une ligne, basé sur l'ID d'une ligne spécifique trié
Par exemple, si ma requête est quelque chose comme:
SELECT id, name FROM people ORDER BY name ASC
avec des résultats tels que:
id name 3 Andrew 1 Bob 5 Joe 4 John 2 Steve
Je voudrais obtenir le rang (quelle ligne il finit dans les résultats) sans retourner toutes les lignes et les jeter en boucle jusqu'à ce que j'arrive à celui que je veux (en PHP).
Par exemple, je voudrais pour sélectionner le « rang » de « Steve » pour qu'il revienne - dans ce cas - 5 (pas sa carte d'identité, mais le « rang » de son nom dans la requête ci-dessus) .
De même, je voudrais être en mesure de choisir le rang de ce que la ligne a l'ID 1. Pour cet exemple, je voudrais revenir un « rang » de 2 (parce que c'est à ce résultat ligne il y a un ID de 1) et rien d'autre.
Je suis Google'd autant que possible avec des résultats variables ... soit ayant des requêtes très lentes pour les tables plus ou avoir à créer toutes sortes de tables temporaires et variables utilisateur (l'ex-je vraiment éviter , ce dernier, je suppose que je peux vivre avec).
Toute aide ou aperçu serait grandement apprécié.
La solution
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
Autres conseils
Quelque chose comme ça?
SELECT Row, id, name
FROM (SELECT @row := @row + 1 AS Row, id, name
FROM people
ORDER BY name ASC)
WHERE Row = @SomeRowNumber
Si vous voulez aller de l'ID, modifier simplement la clause where.
Essayez ceci:
SELECT @rownum:=@rownum+1 `rank`, p.id, p.name
FROM people p, (SELECT @rownum:=0) r
ORDER BY name ASC
J'essaie de ce code ... peut aider les autres Je reçois résultat des utilisateurs et télécharger table pour photo de profil d'utilisateur et le joindre que je suis après le calcul des points de l'utilisateur et le tri sur eux. Enfin, je suis la vérification et l'ajout de numéro de ligne pour le classement pour les utilisateurs ... Injoy il. merci
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%'