grouper des champs suivant une condition

ViPHP
pjl
ViPHP | 2119 Messages

04 juin 2005, 12:02

ce n'est pas une question d'être plus pratique ou pas.
Une date se stocke dans un champ au format date.
Point barre.
Ce n'est pas parce que des incapables ont bossés sur ce projet que tu dois nettoyer leurs merdes.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

04 juin 2005, 12:13

Une date se stocke dans un champ au format date.
Point barre.
ça je suis bien d'accord...
Ce n'est pas parce que des incapables ont bossés sur ce projet que tu dois nettoyer leurs merdes.
si c'était si simple que ça :lol:
tu crois vraiment à ce que tu dis ? qu'un pauvre stagiaire peut exiger une refonte du produit principal de la boite, même si c'est parfaitement justifié ?
ce qui veut dire bloquer les développements

je ne sais pas dans quel monde tu vis, mais à mon avis c'est tout le principe du travail : quand un chef te dit de faire, tu fais
tu peux essayer d'argumenter, mais s'il insiste c'est lui qui décide, c'est le principe d'un chef

alors dans le contexte d'un stage...
j'aimerai bien faire ça, parceque ça me saoule de faire avec les varchar, mais déjà ces varchar ne gênent pas le responsable technique plus que ça, et ils ne bloqueront pas le développement de leur produit pour tout reprendre, même si ce serait mieux

il faut quand même tenir compte de la réalité :)

ViPHP
pjl
ViPHP | 2119 Messages

04 juin 2005, 12:37

On ne doit pas avoir le même age et donc ne pas réagir de la même facon.

Dans ce genre de cas de figure, surtout si c'est l'application principale de la boite, si mon chef me demande de faire un truc non conforme, je prépare un dossier et déclanche une réunion entre moi, mon chef et son supérieur ou/et les autres développeurs.
Déjà, c'est une précaution pour que l'on ne vienne pas me dire ensuite que l'on ne savait pas.

Maintenant, c'est vrai qu'en tant que stagiaire, c'est moins évident.

Déjà, si j'étais à ta place, je ferais une copie de l'application et de la base puis je passerai en force le champ au format date. Si toutes les dates sont réellement au format yyyy-mm-dd, ca devrait passer sans problème puis après je teste l'application pour voir si elle buge ou pas.

Maintenant, tu me dis te tenir compte de la réalité mais il n'y a jamais qu'une seule réalité. Tout dépend du coté ou on se place.
Essaye discrètement de savoir qui a concu la base de données. Tu pourrais avoir une surprise.

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

04 juin 2005, 14:00

Déjà, si j'étais à ta place, je ferais une copie de l'application et de la base puis je passerai en force le champ au format date. Si toutes les dates sont réellement au format yyyy-mm-dd, ca devrait passer sans problème puis après je teste l'application pour voir si elle buge ou pas.
En fait, on espère que tu bosses déjà sur une copie de l'application.
Et que tu fais du versionning (tu enregistres tes différentes versions de programmes, au fur et à mesure, au lieu de toucher au même programme tout du long)

ViPHP
pjl
ViPHP | 2119 Messages

04 juin 2005, 15:05

Celà fait partie des pré-requis mais tu as bien raison de le préciser.

J'ai un peu trop l'habitude et j'oublie de le préciser.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

04 juin 2005, 16:39

vous allez rire, mais apparament ils pour habitude de bosser directement sur la prod...

pour l'instant ce n'est pas gênant pour moi car je développe un truc nouveau qui n'est pas accessible pour le moment

mais ça c'est un autre problème dont je discuterai avec eux le moment venu

pour l'instant, le problème c'est que les dates sont stockées comme ça :
"aaaammjj"

donc en passant tout en date je ne sais pas si ça va bien garder les infos
et il faudrait modifier toutes les manipulations effectuées sur ces champs dans l'appli

et là je me vois mal leur imposer de faire ça en ma qualité de petit stagiaire
d'autant que comme je l'ai dit, eux ça leur convient très bien :roll:

je partage votre avis, mais parfois quand on débarque quelque part on a pas forcément les moyens de tout chambouler alors on s'adapte :(

ViPHP
pjl
ViPHP | 2119 Messages

04 juin 2005, 20:24

Y'a pas à dire. Il y a vraiment des brèles qui occupent certaines fonctions.

Qu'un dev amateur fasse celà, OK mais dans une appli pro.............

Bon courage.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 juin 2005, 14:30

Bon courage.
héhé merci :lol:

Bon pour revenir au sujet initial, j'ai réussi à faire ce que je voulais faire, à savoir un classement directement en SQL

je le poste des fois que ça intéresse quelqu'un, vous verrez si c'est bien ça que vous aviez compris ;)

donc voici une petite table pour tester :

Code : Tout sélectionner

# # Table structure for table 'operations' # CREATE TABLE operations ( id_operation int(3) unsigned NOT NULL auto_increment, date_debut date default NULL, date_fin date default NULL, ecart tinyint(3) unsigned default NULL, PRIMARY KEY (id_operation), KEY id (id_operation) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; # # Dumping data for table 'operations' # INSERT INTO operations VALUES("1", "2005-06-05", "2005-06-10", "5"); INSERT INTO operations VALUES("2", "2005-06-05", "2005-06-15", "10"); INSERT INTO operations VALUES("3", "2005-06-05", "2005-06-11", "6"); INSERT INTO operations VALUES("4", "2005-06-05", "2005-06-28", "22"); INSERT INTO operations VALUES("5", "2005-06-05", "2005-06-25", "20"); INSERT INTO operations VALUES("6", "2005-06-05", "2005-07-10", "35"); INSERT INTO operations VALUES("7", "2005-06-05", "2005-06-06", "1");
j'ai mis ici un champ écart pour vérifier, mais normalement on est pas censé l'avoir, sinon ça sert à rien :)

et ensuite la requête
d'abord simplement créer un champ qui contient le libellé de la catégorie

Code : Tout sélectionner

# les critères de tri # ecart <= 7 -> 'DM' # ecart <= 15 -> 'SP' # ecart <= 30 -> 'SS' # ecart > 30 -> 'MS' SELECT id_operation, date_debut, date_fin, ecart, CASE WHEN DATEDIFF(date_fin,date_debut) <= 7 THEN "DM" WHEN DATEDIFF(date_fin,date_debut) <= 15 THEN "SP" WHEN DATEDIFF(date_fin,date_debut) <= 30 THEN "SP" ELSE "MS" END AS categorie FROM operations;
et là, le regroupement par catégorie

Code : Tout sélectionner

SELECT COUNT(*) AS nbre_operations, CASE WHEN DATEDIFF(date_fin,date_debut) <= 7 THEN "DM" WHEN DATEDIFF(date_fin,date_debut) <= 15 THEN "SP" WHEN DATEDIFF(date_fin,date_debut) <= 30 THEN "SP" ELSE "MS" END AS categorie FROM operations GROUP BY categorie;
et voilà, comme ça on a nos valeurs déjà classées, le résultat de la commande :
3 | DM
1 | MS
3 | SP
ah ça me fait rêver :cry: