Comment selectionner un chiffre mini et maxi d'une base?

tryan

WRInaute passionné
Bonjour

J'essaye en vient de récupérer le plus petit chiffre et le plus grand dans ma basse sans succès :? .

Soit une base nommé "Nombre" comportant 10 champs nommé "chiffre" (chiffre1, chiffre2,etc..)
------Nombre------
chiffre1--chiffre2--
--300-------600---

Quelle est le style de la requête à effectuer avec une boucle WHILE pour sortir uniquement le plus petit chiffre et le plus grand svp ?
Merci
 

YoyoS

WRInaute accro
Me semble que t'as une base vraiment mal foutue hein tryan :mrgreen: car un simple MIN et MAX sur un seul champ d'une seule table aurait suffit normalement.
 

ortolojf

WRInaute accro
Ultra facile

$sql ="SELECT MIN(chiffre), MAX(chiffre) FROM nom_table";

// $conn est l'identificateur rendu par mysql_connect()
$res = @mysql_query($sql, $conn);
if(!$res)
{
Message d'erreur, peu probable
@mysql_close($conn);
exit;
}
$row = @mysql_fetch_row($res);
if(!$row)
{
// Message d'erreur, peu probable.
@mysql_close($conn);
exit;
}
$min_chiffre = $row[0];
$max_chiffre = $row[1];


Pas plus compliqué, non ?

Une seule requête SQL suffit. Encore faut-il savoir un peu de SQL...

Pour s'informer sur la syntaxe de SQL, faire: 'info mysql' en ligne de commande ( sous Linux ), ou bien je suppose qu'il y a un aide sous Windows.

Sinon, la bibliographie de SQL est riche...

Bien à toi.

Amicalement.

Jean-François Ortolo
 

BadProcESs

WRInaute passionné
Applique un tri simple. Je ne sait pas en quel language tu code, mais algorithmiquement ca donne :

Code:
Variable min = 0
Variable Max = 0

Boucle chiffre
  Si (chiffre < min Ou chiffre = 0) Alors min = chiffre
  Si (chiffre > max) Alors max = chiffre
  Suivant
FinBoucle
 

YoyoS

WRInaute accro
ortolojf il vient de dire qu'il voulait le plus petit et le plus grand sur tout ses champs en même temps :D Ou alors j'ai rien capté de ce qu'il a dit

Après relecture, oui comme badprocess :) Mais c'est bourrin quand même. T'aurais eu une meilleur structure de tes tables, c'était fait en une seule requête.
 

ortolojf

WRInaute accro
Bonjour Yoyo

Je te prie de m'excuser, je n'avais pas fait attention.

La logique ne voudrait-elle pas, qu'il change d'architecture de données, en copiant l'ancienne table versune nouvelle table à un seul champ chiffre ?

Bien à vous.

Amicalement.

Jean-François Ortolo
 

tryan

WRInaute passionné
Merci de vos réponses :).

YoyoS, tu as très bien compris ^^.
Tu dis que ma base est mal foutue ... tu as surement raison mais je fais au mieux ^^.

...car un simple MIN et MAX sur un seul champ d'une seule table aurait suffit normalement
Bon, je ne connaissais pas MIN() et MAX() mais en quoi ma base est mal foutue ?

En faite, ma base "Nombre" contient en réalité des prix en fonction de dates.
Donc chaque date (debut/fin) comprend forcement 1 prix. Si 10 dates -> 10 prix soit prix1, prix2,prix3, etc ....jusqu'à prix10 correspondant à la 10 ieme dates saisie ... je ne vois pas comment j'aurais pu faire autrement ?
 

YoyoS

WRInaute accro
le probleme c'est que si tu as plusieurs champs "chiffre" qui ont un lien ensemble et une même signification, c'est pas normal. S'il existe un lien entre eux, tu dois créer une table à part avec un seul champ "chiffre".
 

tryan

WRInaute passionné
YoyoS a dit:
.. S'il existe un lien entre eux, tu dois créer une table à part avec un seul champ "chiffre".

J'avoue avoir du mal à suivre là !
Si je créé une table à part, il me faudra forcément mes 10 champs prix1 à prix10 avec un champs id.

id- prix1-prix2- prix3-prix4-prix5 ..etc
9--777---200---650---45---45------ect
10--757---500---550---455---455------ect

Que la table ci dessus soit à part ou non, je ne vois pas ce que sa change puisque sa structure principale ne change pas ?
Il me faut d'une façon ou d'une autre 10 tarifs correspondants à 10 dates correspondants eux mêmes à 1 id.

BadProcESs
Code:
Boucle chiffre
  Si (chiffre < min Ou chiffre = 0) Alors min = chiffre
  Si (chiffre > max) Alors max = chiffre
  Suivant
FinBoucle
chiffre correspond à mes variables $prix1 à $prix10 et ... bref, je pige rien :?
 

forummp3

WRInaute passionné
pour ton cas, une bonne structure aurrait etait comme ca:

table(prix,type_prix)

avec type prix tes "chiffre1","chiffre2","chiffre3", etc)


comme ca, tu pourrai faire:

select max( prix),min(prix) group by type_prix
 

tryan

WRInaute passionné
Heuuuuu .... sa me saoule beacause je capte pas!

En gros sa ferait un truc du genre:

----------table----------
id-------prix-----type_ prix-----
1--------100-------prix1
1--------65---------prix2
1--------988-------prix3
1--------456-------prix4
1--------4545-----prix5
1--------85-------prix6
1--------232-------prix7
1--------213-------prix8
1--------123-------prix9
1--------45-------prix10
2--------896-------prix1
2--------64-------prix2
2--------654-------prix3
etc...

La requête:
$id= id demandé
select max( prix),min(prix) FROM table WHERE id = $id
c'est sa ou je suis encore à côté de la plaque ?
 

BadProcESs

WRInaute passionné
tryan a dit:
BadProcESs
Code:
Boucle chiffre
  Si (chiffre < min Ou chiffre = 0) Alors min = chiffre
  Si (chiffre > max) Alors max = chiffre
  Suivant
FinBoucle
chiffre correspond à mes variables $prix1 à $prix10 et ... bref, je pige rien :?

"chiffre" correspond au tableau (liste) de tous tes nombres réunis.
Ainsi, dans ton exemple :

------Nombre------
chiffre1--chiffre2--
--300-------600---
"chiffre" == {300, 600}
 

Bacteries

WRInaute passionné
Arf ouais tryan ta base me semble pas tip top.

Si c'est vraiment un prix lié à une date et ce prix lié à un produit :
Table Produit
id, nom, ...
Table prixProduit
idProduit, date, Prix

Simple et tu peux sélectionner le min et max en une seule requête pour un produit donné.
 

tryan

WRInaute passionné
Yes Bacteries, on me la déjà dit ^^ alors je recommence ..encore ..et je pose des questions ..encore ^^.

Nouvelle table, nouvelle incompréhension:

--------TARIF---------
id-----prix-----type_prix
9------883------prix1
9------787-------prix2
9------10063----prix3
9------658------prix4
9------11111-----prix5
9-------45------prix6

Requête:
SELECT min( prix ) , max( prix ) FROM `TARIF` WHERE id =9

Résultat:
min(prix)--max(prix)
--10063 -----883

Sa ne devrait pas être 11111 et 45 normalement ?
 

tryan

WRInaute passionné
forummp3 a dit:
t'es sur que toute tes ligne sont id=9 ?!
Oui, id=9 partout !

requête SQL:
SELECT min( prix ) , max( prix )
FROM `TARIF`

Résultat:
min( prix ---max( prix )
10063-------- 883

Je ne pige pas ^^ .
 

tryan

WRInaute passionné
Code:
-- Structure de la table `TARIF`
-- 

CREATE TABLE `TARIF` (
  `id` int(11) NOT NULL,
  `prix` varchar(250) character set latin1 collate latin1_general_ci NOT NULL,
  `type_prix` varchar(150) character set latin1 collate latin1_general_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci;

-- 
-- Contenu de la table `TARIF`
-- 

INSERT INTO `TARIF` (`id`, `prix`, `type_prix`) VALUES (9, '883', 'prix1'),
(9, '787', 'prix2'),
(9, '10063', 'prix3'),
(9, '658', 'prix4'),
(9, '11111', 'prix5'),
(9, '45', 'prix6');
 

Bacteries

WRInaute passionné
Essaye ça et recommence :
ALTER TABLE `tarif` CHANGE `prix` `prix` INT( 250 ) NOT NULL

Ton prix c'est un chiffre pas une chaine de caractère, un min se fait sur un chiffre / nombre.
 

tryan

WRInaute passionné
Bacteries a dit:
Ton prix c'est un chiffre pas une chaine de caractère, un min se fait sur un chiffre / nombre.

Une corde svp ... je viens de passer presque la journée pour un INT(250) :roll: .

Merci Bacteries et merci pour vos réponses :wink: et ....... à bientôt .
 

Discussions similaires

Haut