2015-08-21 2 views
0

Est-il possible de trouver la position d'une ligne dans une table mysql?Comment trouver la position d'une ligne dans une table mysql?

Par exemple, si nous avions la requête MySQL

SELECT * FROM `table` WHERE `Date` > X ORDER BY `Date` DESC 

Cela permet de sélectionner toutes les lignes créées après X et les organiser par rapport à la date où ils ont été créés. Et si je sais que l'un de ces lignes ID, ce code de requête pourrait-il être modifié afin que je sache à quelle position il se trouve dans cette requête.

Je veux dire que la requête donne 5 lignes et la ligne dont je connais l'ID est l'une d'entre elles, est-il possible de vérifier quelle position elle a dans la requête. Je veux dire, est-ce 1er, 2e, ..., 5e. J'espère que j'ai expliqué clairement mon problème.

En utilisant la suggestion Blizz je trouve que

SET @I=0; SELECT @I:[email protected]+1 AS `I`, `ID`, `From`, `Action`, `To`, `Value`, `Date` FROM `papers` WHERE `Action` = 'Review' GROUP BY `ID` ORDER BY `Date` DESC 

Est-ce que ce que je veux mais il ne fonctionne que dans localhost/phpmyadmin et quand je le lance dans localhost/monsite une erreur se disant

Vous avoir une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'SELECT @I: = @ rang + 1 AS rank, ID, From, Action, To, Value, Date FROM `' à la ligne 1

Est-ce que quelqu'un sait pourquoi cela se produit?

+0

espoir Ce soloves votre problème [obtenir la position de la ligne dans la requête MYSQL [dupliquer]] [1] [MySQL obtenir la position de la ligne ORDER BY] [2] [1]: http://stackoverflow.com/questions/7057772/get-row-position-in-mysql-query [2]: http://stackoverflow.com/questions/3614666/mysql-get- row-position-in-order-by –

+0

@Blizz, savez-vous pourquoi cette erreur se produit dans ma question? – user3741635

+0

Votre requête d'exemple est de 2 instructions, que les instructions de requête mysql normales n'exécuteront pas. Vous pouvez le réécrire avec une jointure croisée sur le select l'initialiser la variable @I – Kickstart

Répondre

0

Votre exemple d'instruction SQL est de 2 instructions réelles. La plupart des fonctions PHP de MySQL fonctionnent sur une seule instruction.

Vous pouvez utiliser une jointure croisée pour forcer l'initialisation de la variable: -

SELECT @I:[email protected]+1 AS `I`, `ID`, `From`, `Action`, `To`, `Value`, `Date` 
FROM `papers` 
CROSS JOIN 
(
    SELECT @I := 0 
) sub0 
WHERE `Action` = 'Review' 
GROUP BY `ID` 
ORDER BY `Date` DESC 

Notez qu'il existe aussi un problème possible avec l'ordre des champs par rapport à l'endroit où la variable est traitée, et vous éventuellement commander les données dans une sous-requête avant de traiter la variable pour ajouter le compteur.

SELECT @I:[email protected]+1 AS `I`, `ID`, `From`, `Action`, `To`, `Value`, `Date` 
FROM `papers` 
(
    SELECT `ID`, `From`, `Action`, `To`, `Value`, `Date` 
    FROM `papers` 
    WHERE `Action` = 'Review' 
    GROUP BY `ID` 
    ORDER BY `Date` DESC 
) 
CROSS JOIN 
(
    SELECT @I := 0 
) sub0 
ORDER BY `Date` DESC