0
votes

Comment faire référence au tableau généré / aliasé dans la même requête?

Je souhaite trouver la position d'un utilisateur dans un classement et renvoyer les 4 utilisateurs ci-dessus et 4 utilisateurs sous leur position.

Ma table, "prédictions", ressemble à ceci: p>

SELECT *
FROM (
SELECT  l.userId,
        l.rank,
        l.score,
        l.createdAt,
        @curRow := @curRow + 1 AS row_number
FROM    (SELECT * FROM `predictions` WHERE gameId = 18) l
JOIN    (SELECT @curRow := 0) r
ORDER BY rank ASC) generated_ordered_table
WHERE row_number < (SELECT row_number FROM generated_ordered_table WHERE userId = 1)
ORDER BY row_number DESC
LIMIT 0,5


3 commentaires

quelle version de mysql utilisez-vous


mysqlnd 5.0.12-Dev


Pouvez-vous ajouter votre résultat attendu s'il vous plaît. Et une clarification d'environ 4 ci-dessous (correspond-elle 4 ou 4 la plus proche ou 4 la plus éloignée) pour 4 ci-dessus.


3 Réponses :


0
votes

MySQL Version 8+ aurait pu autoriser l'utilisation de fenêtre Noreferrer"> Fonctions et Expressions de table communes (CTES) A >; qui aurait simplifié la requête assez un peu.

Maintenant, dans les anciennes versions (votre cas), la "Table de rang générée" ( Table dérivée ) ne peut plus être référencé dans une sous-requête à l'intérieur du où code> clause. Une solution serait de faire la même chose deux fois ( Sélectionnez la clause CODE> pour obtenir une table générée) à nouveau à l'intérieur de la sous-requête, mais cela serait relativement inefficace. P>

Donc, une autre approche peut être utiliser Tables temporaires . Nous créons une table Temp stockant d'abord les rangs. Et, alors faites référence à la table Temp pour obtenir des résultats en conséquence: P>

SELECT *
FROM gen_rank_tbl 
WHERE row_number < (SELECT row_number FROM gen_rank_tbl WHERE userId = 1)
ORDER BY row_number DESC
LIMIT 0,5


0 commentaires

0
votes

Vous pouvez utiliser un tas de syndicats xxx

mais ce n'est pas joli


0 commentaires

0
votes

Vous pouvez utiliser deux tables dérivées: xxx


0 commentaires