Frage

Ich habe ziemlich viel Zeit heute verbrachte verschiedene Dinge versucht, aber keiner von ihnen scheint zu funktionieren. Hier ist meine Situation ist, würde ich in der Lage sein mag den Rang einer Zeile wählen basierend auf seine ID aus einer speziell sortierte Zeile

Zum Beispiel, wenn meine Frage ist so etwas wie:

SELECT id, name FROM people ORDER BY name ASC

mit Ergebnissen wie:

id   name
3    Andrew
1    Bob
5    Joe
4    John
2    Steve

Ich möchte den Rang erhalten (welche Zeile es in den Ergebnissen endet) ohne alle Zeilen zurückkehrt und sie Looping werfen, bis ich zu dem einen bekomme ich (in PHP) wollen.

Zum Beispiel, würde Ich mag den ‚Rang‘ von ‚Steve‘ wählen, so dass sie wieder - in diesem Fall - 5 (nicht seine ID, aber den ‚Rang‘ seinen Namen in der obigen Abfrage) .

Und ich möchte in der Lage sein, den Rang zu wählen, was auch immer Zeile die ID von 1. Für dieses Beispiel hat, würde ich gerne einen ‚Rang‘ zurückzukehren 2 (denn das ist es, was in Ergebniszeile gibt es eine ID 1) und sonst nichts.

Ich habe so vielen Google'd wie ich konnte mit den Ergebnissen unterschiedlicher ... entweder mit wirklich langsam Anfragen für größere Tabellen oder mit allerlei temporären Tabellen und Benutzervariablen erstellen (den ehemaligen ich wirklich vermeiden möchte Angenommen, diese ich lebe ich mit kann).

Jede Hilfe oder Einsicht wäre sehr dankbar.

War es hilfreich?

Lösung

artfulsoftware :

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

Andere Tipps

So etwas wie das?

SELECT Row, id, name
FROM (SELECT @row := @row + 1 AS Row, id, name
      FROM people
      ORDER BY name ASC)
WHERE Row = @SomeRowNumber

Wenn Sie von der ID gehen wollen, ändern Sie einfach die where-Klausel.

Versuchen Sie folgendes:

SELECT @rownum:=@rownum+1 `rank`, p.id, p.name
FROM people p, (SELECT @rownum:=0) r
ORDER BY name ASC

ich auf diesen Code versuchen ... können andere helfen Ich erhalte Ergebnis von Benutzern und Upload-Tabelle für pic Benutzerprofil und kommen Sie es als nach i Benutzern Punkte am Berechnung und Sortierung auf sich. Endlich ist Überprüfung und das Hinzufügen von Zeilennummer für das Ranking für Benutzer ... Injoy es. Dank

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%'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top