2010-08-26 8 views
3

Dire que j'ai une requête MySQL, par exemple:MySQL numéro de ligne

SELECT id, name, surname FROM employees ORDER BY id 

Le résultat woud être:

id name surname 
1  Peter Smith 
2  John Banjo 
... 
1384 Will Levenstein 

Bien que ce soit une requête ordonnée, je peux supposer toujours (aussi longtemps que Je ne change pas la table) que John Banjo sortira en second lieu.

Maintenant, si ma requête était

SELECT id, name, surname FROM employees WHERE name = 'John' AND surname = 'Banjo' 

Puis-je obtenir en quelque sorte ce que le numéro de ligne serait dans la première requête? J'essaie de le faire dans une requête beaucoup plus compliquée, mais toujours ordonnée, est-il possible de l'archiver?

+0

Le numéro de ligne n'est-il pas égal à la valeur de la colonne ID? – Anpher

+0

@anpher: Supposons que Peter Smith soit supprimé, alors le premier id serait 2. – Johan

+0

@Anpher Je ne peux pas compter sur ça. @Johan J'ai besoin de cela pour tracer la page sur laquelle un élément apparaîtra (la page est limitée à 30 éléments). – cypher

Répondre

2
SELECT x.id, x.name, x.surname, x.rownum 
FROM (
     SELECT @rownum:[email protected]+1 rownum, t.* 
     FROM (SELECT @rownum:=0) r, employees t 
     ORDER BY Id 
) x 
WHERE x.name = 'John' 
AND x.surname = 'Banjo' 
+0

Cela me donne une erreur (chaque table dérivée doit avoir son propre alias) – cypher

+0

@cypher - alias ajouté pour la requête interne. –

Questions connexes