alors effectivement, j'ai pas été assez précis ... mes ID ne sont pas des nombres, mais des caracteres, plus exactement "nom.premiere_lettre_prenom". Désolé.Err... je vais reformuler. Qu'est-ce qui t'empêche de faire "...WHERE id BETWEEN 1 AND 9" si tu sais que l'ID du milieu est 5 ?
Je ne mets pas toute la table le reste ne te servirais a rien, mais voici la structure :Pas de problème, on avance
Est-ce que tu pourrais me montrer la requête qui renvoit le classement complet ainsi que la valeur de référence (celle du milieu de la "section" de classement) et la colonne à laquelle elle correspond ?
Je suis une nouille sous SQL Server, mais la solution est soit une procédure avec un curseur soit deux SELECT avec une UNION. Ou encore une table dérivée, mais je ne peux pas prédire les perfs. Il parait que l'optimiseur de SQL Server est puissant, mais c'est un cas assez spécial, je ne suis pas certain qu'il l'optimise parfaitement. Dès que je comprends exactement ce que tu veux faire je te donnerai quelques pistes à explorer
Code : Tout sélectionner
CREATE TABLE Employe
(
id_employe VARCHAR(40) NOT NULL,
nom_employe VARCHAR(30) NOT NULL,
prenom_employe VARCHAR(30) NOT NULL,
...
PRIMARY KEY (id_employe),
...
);Code : Tout sélectionner
SELECT id_employe, nom_employe, prenom_employe FROM Employe ORDER BY id_employe;
$requete = "SELECT id_employe, nom_employe, prenom_employe FROM Employe WHERE id_employe >&< '".$_SESSION['id']."' ORDER BY id_employe;";
Je ne sais pas si ca répond exactement a tes questions ...
Code : Tout sélectionner
(
SELECT id_employe, nom_employe, prenom_employe
FROM Employe
WHERE id_employe < 'xxx'
ORDER BY id_employe DESC
LIMIT 10
)
UNION ALL
(
SELECT id_employe, nom_employe, prenom_employe
FROM Employe
WHERE id_employe >= 'xxx'
ORDER BY id_employe ASC
LIMIT 11
)
ORDER BY id_employe ASCBen du coup tu vas probablement utiliser le truc de l'UNION. Une dernière chose... euh c'est quoi le >&< de ta requête ? Pour moi ça ressemble à un canard, mais ça doit avoir une autre signification pour SQL Server ?
PS: argh, j'allais oublier le LIMIT bizarre de SQL Server... j'essaie de me pencher dessus, sinon je te poste la soluce pour MySQL et tu t'occupes de ramer pour l'adapter
Code : Tout sélectionner
SELECT TOP 10 id_employe, nom_employe, prenom_employe
FROM
(
SELECT TOP 30 id_employe, nom_employe, prenom_employe
FROM employe
) as tab
Code : Tout sélectionner
(
SELECT TOP 10 id_employe, nom_employe, prenom_employe
FROM Employe
WHERE id_employe < 'xxx'
ORDER BY id_employe DESC
)
UNION ALL
(
SELECT TOP 11 id_employe, nom_employe, prenom_employe
FROM Employe
WHERE id_employe >= 'xxx'
ORDER BY id_employe ASC
)
ORDER BY id_employe ASCCode : Tout sélectionner
SET ROWCOUNT 10;
SELECT * FROM (
SELECT id_employe, nom_employe, prenom_employe
FROM Employe
WHERE id_employe < 'xxx'
ORDER BY id_employe DESC
) AS tmp
ORDER BY id_employe ASC;
SET ROWCOUNT 11;
SELECT id_employe, nom_employe, prenom_employe
FROM Employe
WHERE id_employe >= 'xxx'
ORDER BY id_employe ASC;
SET ROWCOUNT 0Code : Tout sélectionner
SELECT top 7 *
FROM employe
WHERE id_employe >= (SELECT TOP 1 *
FROM (SELECT TOP 3 *
FROM employe
WHERE id_employe = _SESSION
ORDER BY id_employe DESC) AS 'toto'
ORDER BY id_employe ASC)
ORDER BY id_employe asc;Code : Tout sélectionner
SELECT TOP 7 *
FROM EMPLOYE
WHERE (Id_employe >= 'pellardy.d')Code : Tout sélectionner
SELECT TOP 1 * FROM (SELECT TOP 3 *
FROM EMPLOYE
WHERE (Id_employe < 'pellardy.d')
ORDER BY Id_employe DESC) DERIVEDTBL ORDER BY Id_employe ASC;Code : Tout sélectionner
SELECT TOP 7 *
FROM EMPLOYE
WHERE (Id_employe >=
(SELECT TOP 1 *
FROM (SELECT TOP 3 *
FROM EMPLOYE
WHERE (Id_employe < 'pellardy.d')
ORDER BY Id_employe DESC) DERIVEDTBL
ORDER BY Id_employe))
ORDER BY Id_employe ASC;Code : Tout sélectionner
(
SELECT TOP 10 id_employe, nom_employe, prenom_employe
FROM Employe
WHERE id_employe < 'pellardy.d'
ORDER BY id_employe DESC
)
UNION ALL
(
SELECT TOP 11 id_employe, nom_employe, prenom_employe
FROM Employe
WHERE id_employe >= 'pellardy.d'
ORDER BY id_employe ASC
)
ORDER BY id_employe ASC