2017-04-30 3 views
0

Wie kann ich aus anderen auswählen in MYSQL Abfrage auswählen? So etwas wie diesesWie kann ich aus anderen auswählen in MYSQL Abfrage auswählen?

SET @row_number = 0; 

SELECT a.num FROM 

(SELECT 
    (@row_number:[email protected]_number + 1) AS num, id 
FROM 
    main) as a where a.id=6 

möchte ich die Anzahl der Datensatz wissen, wo id = 6, wenn es die erste Zeile, zweite Zeile oder dritte ist ein

bitte jemand mir helfen kann.

+2

Siehe https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-very-simple- sql-query – Strawberry

+0

"Ich möchte die Nummer des Datensatzes wissen, wo id = 6" ** clear ** "Wenn es die erste Zeile, zweite Zeile oder dritte" ** unklar ** – nogad

Antwort

1

Wenn Ihre Abfrage den Filter where a.id = 6 hat, wird die Zeile mit id = 6 immer die erste Zeile der Ergebnismenge sein.

Ich interpretiere Ihre Frage zu bedeuten: "Wenn ich nach ID aufsteigend sortiert, welche Zeile Nummer ist die Zeile mit ID = 6 wird auf". Wenn ja, können Sie eine einfache Aggregation verwenden:

Ihre Abfrage scheint durch Aufzählung aller Zeilen inspiriert. Sie können diese Version auch tun:

select m.* 
from (select m.*, (@rn := @rn + 1) as rn 
     from main m cross join 
      (select @rn := 0) params 
     order by id 
    ) m 
where id = 6; 

Die erste Version soll effizienter sein, vor allem mit einem Index auf id.

+0

Ich würde 'ORDER BY m hinzufügen .id ASC', nur um sicher zu sein. – rickdenhaan

+0

@rickdenhaan. . . Das hat absolut keine Relevanz in der ersten Abfrage. Es handelt sich um eine Aggregationsabfrage, die eine Zeile zurückgibt. –

+0

Ah, ja, du hast absolut recht. Mein Fehler. – rickdenhaan

Verwandte Themen