Je souhaiterais trouver dans une table, le n-ième élément.
Par exemple, disons que j'ai une table "pays" avec comme champs :
id_pays,nom_pays,superficie_pays
Je cherche le 10ème pays le plus vaste
Evidemment, je peux faire un truc du genre :
$Compteur=0;
$Requete="Select * from pays order by superficie_pays desc";
$Query= $mysql_query($Requete);
While ($Compteur<10)
{
$Compteur=$Compteur+1;
$Result=mysql_fetch_array($Query);
}
echo "10 ème pays le plus vaste : ".$Result["nom_pays"]." avec une
superficie de ".$Result["superficie_pays"]." km²";
Mais, y a-t-il une méthode plus directe. Je préfèrerais, car j'ai un peu
plus de 10 enregistrements ;-)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Xavier_B
Holà ! Je raconte n'importe quoi. En fait ma question serait plutôt : "Quel est le rang de tel pays, par exemple la France, en termes de superficie ?"
Y a-t-il une autre solution que :
$Compteur=1; $Requete="Select * from pays order by superficie_pays desc"; $Query= $mysql_query($Requete);
$Result=mysql_fetch_array($Query); While ($Result["nom_pays"]<>'France') { $Compteur=$Compteur+1; $Result=mysql_fetch_array($Query); } echo "La France est le ".$Compteur." avec une superficie de ".$Result["superficie_pays"]." km²";
Merci !
"Xavier_B" a écrit dans le message de news: 460d009c$0$27374$
Bonjour
Je souhaiterais trouver dans une table, le n-ième élément. Par exemple, disons que j'ai une table "pays" avec comme champs : id_pays,nom_pays,superficie_pays
Je cherche le 10ème pays le plus vaste Evidemment, je peux faire un truc du genre : $Compteur=0; $Requete="Select * from pays order by superficie_pays desc"; $Query= $mysql_query($Requete); While ($Compteur<10) { $Compteur=$Compteur+1; $Result=mysql_fetch_array($Query); } echo "10 ème pays le plus vaste : ".$Result["nom_pays"]." avec une superficie de ".$Result["superficie_pays"]." km²";
Mais, y a-t-il une méthode plus directe. Je préfèrerais, car j'ai un peu plus de 10 enregistrements ;-)
Merci d'avance pour vos lumières
Holà ! Je raconte n'importe quoi. En fait ma question serait plutôt : "Quel
est le rang de tel pays, par exemple la France, en termes de superficie ?"
Y a-t-il une autre solution que :
$Compteur=1;
$Requete="Select * from pays order by superficie_pays desc";
$Query= $mysql_query($Requete);
$Result=mysql_fetch_array($Query);
While ($Result["nom_pays"]<>'France')
{
$Compteur=$Compteur+1;
$Result=mysql_fetch_array($Query);
}
echo "La France est le ".$Compteur." avec une superficie de
".$Result["superficie_pays"]." km²";
Merci !
"Xavier_B" <pasdepubalacon@freesurf.fr> a écrit dans le message de news:
460d009c$0$27374$ba4acef3@news.orange.fr...
Bonjour
Je souhaiterais trouver dans une table, le n-ième élément.
Par exemple, disons que j'ai une table "pays" avec comme champs :
id_pays,nom_pays,superficie_pays
Je cherche le 10ème pays le plus vaste
Evidemment, je peux faire un truc du genre :
$Compteur=0;
$Requete="Select * from pays order by superficie_pays desc";
$Query= $mysql_query($Requete);
While ($Compteur<10)
{
$Compteur=$Compteur+1;
$Result=mysql_fetch_array($Query);
}
echo "10 ème pays le plus vaste : ".$Result["nom_pays"]." avec une
superficie de ".$Result["superficie_pays"]." km²";
Mais, y a-t-il une méthode plus directe. Je préfèrerais, car j'ai un peu
plus de 10 enregistrements ;-)
Holà ! Je raconte n'importe quoi. En fait ma question serait plutôt : "Quel est le rang de tel pays, par exemple la France, en termes de superficie ?"
Y a-t-il une autre solution que :
$Compteur=1; $Requete="Select * from pays order by superficie_pays desc"; $Query= $mysql_query($Requete);
$Result=mysql_fetch_array($Query); While ($Result["nom_pays"]<>'France') { $Compteur=$Compteur+1; $Result=mysql_fetch_array($Query); } echo "La France est le ".$Compteur." avec une superficie de ".$Result["superficie_pays"]." km²";
Merci !
"Xavier_B" a écrit dans le message de news: 460d009c$0$27374$
Bonjour
Je souhaiterais trouver dans une table, le n-ième élément. Par exemple, disons que j'ai une table "pays" avec comme champs : id_pays,nom_pays,superficie_pays
Je cherche le 10ème pays le plus vaste Evidemment, je peux faire un truc du genre : $Compteur=0; $Requete="Select * from pays order by superficie_pays desc"; $Query= $mysql_query($Requete); While ($Compteur<10) { $Compteur=$Compteur+1; $Result=mysql_fetch_array($Query); } echo "10 ème pays le plus vaste : ".$Result["nom_pays"]." avec une superficie de ".$Result["superficie_pays"]." km²";
Mais, y a-t-il une méthode plus directe. Je préfèrerais, car j'ai un peu plus de 10 enregistrements ;-)
Merci d'avance pour vos lumières
Patrick Texier
Le Fri, 30 Mar 2007 14:41:26 +0200, Xavier_B a écrit :
Holà ! Je raconte n'importe quoi. En fait ma question serait plutôt : "Quel est le rang de tel pays, par exemple la France, en termes de superficie ?"
Y a-t-il une autre solution que :
$Compteur=1; $Requete="Select * from pays order by superficie_pays desc"; $Query= $mysql_query($Requete);
$Result=mysql_fetch_array($Query); While ($Result["nom_pays"]<>'France') { $Compteur=$Compteur+1; $Result=mysql_fetch_array($Query); }
Ici, il y a peu de risques mais dans le cas général il faut tester si la valeur est bien différente de la précédente avant d'incrémenter le rang. Ceci oblige effectivement à lire tous les enregistrements avant. Vous pouvez quand même limiter le SELECT en ne prenant que les superficies supérieures avec une requête imbriquée :
select * from pays where superficie_pays >= (select superficie_pays where nom_pays = "France") order by superficie_pays desc ; -- Patrick Texier Base de données libre de résultats de grands-prix. (F1, GP pre-1950, F2, F3000, GP2, A1GP, IRL, ChampCars...) <http://www.gpsql.org>
Le Fri, 30 Mar 2007 14:41:26 +0200, Xavier_B a écrit :
Holà ! Je raconte n'importe quoi. En fait ma question serait plutôt : "Quel
est le rang de tel pays, par exemple la France, en termes de superficie ?"
Y a-t-il une autre solution que :
$Compteur=1;
$Requete="Select * from pays order by superficie_pays desc";
$Query= $mysql_query($Requete);
$Result=mysql_fetch_array($Query);
While ($Result["nom_pays"]<>'France')
{
$Compteur=$Compteur+1;
$Result=mysql_fetch_array($Query);
}
Ici, il y a peu de risques mais dans le cas général il faut tester si la
valeur est bien différente de la précédente avant d'incrémenter le rang.
Ceci oblige effectivement à lire tous les enregistrements avant. Vous
pouvez quand même limiter le SELECT en ne prenant que les superficies
supérieures avec une requête imbriquée :
select *
from pays
where superficie_pays >=
(select superficie_pays
where nom_pays = "France")
order by superficie_pays desc ;
--
Patrick Texier
Base de données libre de résultats de grands-prix.
(F1, GP pre-1950, F2, F3000, GP2, A1GP, IRL, ChampCars...)
<http://www.gpsql.org>
Le Fri, 30 Mar 2007 14:41:26 +0200, Xavier_B a écrit :
Holà ! Je raconte n'importe quoi. En fait ma question serait plutôt : "Quel est le rang de tel pays, par exemple la France, en termes de superficie ?"
Y a-t-il une autre solution que :
$Compteur=1; $Requete="Select * from pays order by superficie_pays desc"; $Query= $mysql_query($Requete);
$Result=mysql_fetch_array($Query); While ($Result["nom_pays"]<>'France') { $Compteur=$Compteur+1; $Result=mysql_fetch_array($Query); }
Ici, il y a peu de risques mais dans le cas général il faut tester si la valeur est bien différente de la précédente avant d'incrémenter le rang. Ceci oblige effectivement à lire tous les enregistrements avant. Vous pouvez quand même limiter le SELECT en ne prenant que les superficies supérieures avec une requête imbriquée :
select * from pays where superficie_pays >= (select superficie_pays where nom_pays = "France") order by superficie_pays desc ; -- Patrick Texier Base de données libre de résultats de grands-prix. (F1, GP pre-1950, F2, F3000, GP2, A1GP, IRL, ChampCars...) <http://www.gpsql.org>
Patrick Texier
Le Fri, 30 Mar 2007 14:41:26 +0200, Xavier_B a écrit :
Holà ! Je raconte n'importe quoi. En fait ma question serait plutôt : "Quel est le rang de tel pays, par exemple la France, en termes de superficie ?"
Il faudrait vérifier avant d'incrémenter le rang que la valeur est différente de la précédente.
Si vous avez besoin de la liste, vous pouvez la limiter ainsi :
select * from pays where superficie_pays >= (select superficie_pays where nom_pays = "France") order by superficie_pays desc ;
Sinon, il suffit de compter le nombre de valeurs supérieures et d'ajouter un :
select count(*) + 1 as rang from pays where superficie_pays >= (select superficie_pays where nom_pays = "France") ;
Le Fri, 30 Mar 2007 14:41:26 +0200, Xavier_B a écrit :
Holà ! Je raconte n'importe quoi. En fait ma question serait plutôt : "Quel
est le rang de tel pays, par exemple la France, en termes de superficie ?"
Il faudrait vérifier avant d'incrémenter le rang que la valeur est
différente de la précédente.
Si vous avez besoin de la liste, vous pouvez la limiter ainsi :
select *
from pays
where superficie_pays >=
(select superficie_pays
where nom_pays = "France")
order by superficie_pays desc ;
Sinon, il suffit de compter le nombre de valeurs supérieures et
d'ajouter un :
select count(*) + 1 as rang
from pays
where superficie_pays >=
(select superficie_pays
where nom_pays = "France") ;
select count(*) + 1 as rang from pays where superficie_pays > > (select superficie_pays where nom_pays = "France") ;
Merci ! Je vais essayer
Fred Brouard - SQLpro
Bonjour,
En utilisant les fonctions de fenêtrage de la norme SQL:2003 et en combinant cela avec une sous requête en table dérivée :
SELECT * FROM (SELECT *, RANK() OVER (ORDER BY superficie_pays desc) AS RANG FROM pays) AS T WHERE RANG = 10
Si votre SGBDR supporte les expressions de tables (CTE) :
WITH T AS (SELECT *, RANK() OVER (ORDER BY superficie_pays desc) AS RANG FROM pays) SELECT * FROM T WHERE RANG = 10
Vous touverez de plus amples informations sur ces sujets dans les pages 145 et suivantes et 186 et suivantes de mon livre sur SQL, co écrit avec Christian Soutou.
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
Xavier_B a écrit :
Bonjour
Je souhaiterais trouver dans une table, le n-ième élément. Par exemple, disons que j'ai une table "pays" avec comme champs : id_pays,nom_pays,superficie_pays
Je cherche le 10ème pays le plus vaste Evidemment, je peux faire un truc du genre : $Compteur=0; $Requete="Select * from pays order by superficie_pays desc"; $Query= $mysql_query($Requete); While ($Compteur<10) { $Compteur=$Compteur+1; $Result=mysql_fetch_array($Query); } echo "10 ème pays le plus vaste : ".$Result["nom_pays"]." avec une superficie de ".$Result["superficie_pays"]." km²";
Mais, y a-t-il une méthode plus directe. Je préfèrerais, car j'ai un peu plus de 10 enregistrements ;-)
Merci d'avance pour vos lumières
Bonjour,
En utilisant les fonctions de fenêtrage de la norme SQL:2003 et en
combinant cela avec une sous requête en table dérivée :
SELECT *
FROM (SELECT *, RANK() OVER (ORDER BY superficie_pays desc) AS RANG
FROM pays) AS T
WHERE RANG = 10
Si votre SGBDR supporte les expressions de tables (CTE) :
WITH T
AS (SELECT *, RANK() OVER (ORDER BY superficie_pays desc) AS RANG
FROM pays)
SELECT *
FROM T
WHERE RANG = 10
Vous touverez de plus amples informations sur ces sujets dans les pages
145 et suivantes et 186 et suivantes de mon livre sur SQL, co écrit avec
Christian Soutou.
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Xavier_B a écrit :
Bonjour
Je souhaiterais trouver dans une table, le n-ième élément.
Par exemple, disons que j'ai une table "pays" avec comme champs :
id_pays,nom_pays,superficie_pays
Je cherche le 10ème pays le plus vaste
Evidemment, je peux faire un truc du genre :
$Compteur=0;
$Requete="Select * from pays order by superficie_pays desc";
$Query= $mysql_query($Requete);
While ($Compteur<10)
{
$Compteur=$Compteur+1;
$Result=mysql_fetch_array($Query);
}
echo "10 ème pays le plus vaste : ".$Result["nom_pays"]." avec une
superficie de ".$Result["superficie_pays"]." km²";
Mais, y a-t-il une méthode plus directe. Je préfèrerais, car j'ai un peu
plus de 10 enregistrements ;-)
En utilisant les fonctions de fenêtrage de la norme SQL:2003 et en combinant cela avec une sous requête en table dérivée :
SELECT * FROM (SELECT *, RANK() OVER (ORDER BY superficie_pays desc) AS RANG FROM pays) AS T WHERE RANG = 10
Si votre SGBDR supporte les expressions de tables (CTE) :
WITH T AS (SELECT *, RANK() OVER (ORDER BY superficie_pays desc) AS RANG FROM pays) SELECT * FROM T WHERE RANG = 10
Vous touverez de plus amples informations sur ces sujets dans les pages 145 et suivantes et 186 et suivantes de mon livre sur SQL, co écrit avec Christian Soutou.
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
Xavier_B a écrit :
Bonjour
Je souhaiterais trouver dans une table, le n-ième élément. Par exemple, disons que j'ai une table "pays" avec comme champs : id_pays,nom_pays,superficie_pays
Je cherche le 10ème pays le plus vaste Evidemment, je peux faire un truc du genre : $Compteur=0; $Requete="Select * from pays order by superficie_pays desc"; $Query= $mysql_query($Requete); While ($Compteur<10) { $Compteur=$Compteur+1; $Result=mysql_fetch_array($Query); } echo "10 ème pays le plus vaste : ".$Result["nom_pays"]." avec une superficie de ".$Result["superficie_pays"]." km²";
Mais, y a-t-il une méthode plus directe. Je préfèrerais, car j'ai un peu plus de 10 enregistrements ;-)