Récupérer un numéro de ligne dans un tri alphabétique

VaN
Mammouth du PHP | 1107 Messages

26 avr. 2010, 13:47

Bonjour,

Disons que j'ai la table suivante :
CREATE TABLE IF NOT EXISTS `structures` (
`je_id` smallint(6) NOT NULL AUTO_INCREMENT,
`je_nom` varchar(100) DEFAULT NULL,
PRIMARY KEY (`je_id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=241 ;

INSERT INTO `structures` (`je_id`, `je_nom`) VALUES
(1, 'structure 2'),
(2, 'structure 3'),
(3, 'structure 1'),
Je voudrais récupérer le numéro de ligne (pas le champ "je_id", vraiment le numéro de ligne) d'une structure donnée dans un tri alphabétique de la table sur le champ "je_nom". Est-ce possible en SQL ?

Par exemple :
SELECT ? FROM structures WHERE je_id = 2 ORDER BY je_nom
devrait me renvoyer 3, mais je ne sais pas par quoi remplacer le "?".

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

26 avr. 2010, 15:14

Trouvé sur internet :
SELECT @rownum:=@rownum+1 nb_ligne, p.*
FROM products p,
(SELECT @rownum:=0) r
ORDER BY product_name DESC
nb_ligne id_product product_name
1 4 productD
2 3 productC
3 2 productB
4 1 productA

VaN
Mammouth du PHP | 1107 Messages

26 avr. 2010, 19:30

Effectivement, ça fonctionne si je sors une liste de plusieurs lignes. Mais ce qui m'intéresse actuellement, ça serait de connaitre la position d'une ligne donnée, si je sortais une ligne. Donc il faudrait que je case un WHERE je_id = X dans la requête. Mais du coup, il ne sort qu'une ligne, et sa position est tout le temps égale à 1 : /

ViPHP
ViPHP | 2287 Messages

27 avr. 2010, 00:28

Effectivement, ça fonctionne si je sors une liste de plusieurs lignes. Mais ce qui m'intéresse actuellement, ça serait de connaitre la position d'une ligne donnée, si je sortais une ligne. Donc il faudrait que je case un WHERE je_id = X dans la requête. Mais du coup, il ne sort qu'une ligne, et sa position est tout le temps égale à 1 : /
Dans ce cas tu as simplement besoin d'un champ supplémentaire dans ta table (qui te servirait à faire persister cette information éphémère)
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Mammouth du PHP | 672 Messages

27 avr. 2010, 11:15

Effectivement, ça fonctionne si je sors une liste de plusieurs lignes. Mais ce qui m'intéresse actuellement, ça serait de connaitre la position d'une ligne donnée, si je sortais une ligne. Donc il faudrait que je case un WHERE je_id = X dans la requête. Mais du coup, il ne sort qu'une ligne, et sa position est tout le temps égale à 1 : /
C'est un peu normal...
Pour une BDD relationnelle, la notion de "ligne" n'existe pas.
La "ligne" que te renvoie les ROWNUM et autres représente juste le rang dans les résultats.

D'ailleurs, par curiosité : quel est l'usage envisagé ?