par
macgawel » 31 mars 2010, 17:24
Bonjour.
1. Comment sont définies les périodes ?
Est-il nécessaire de garder deux périodes distinctes quand elles vérifient les conditions (prix identique + se suivent) ?
Parce qu'il y a peut-être moyen de solutionner le problème au moment de la création/modification des périodes
2. Il nous manque des infos sur le fonctionnement/la taille des tables.
Si la mise à jour des périodes est occasionnelle et que la consultation est régulière, tu peux avoir intérêt à créer une table qui regroupe les périodes au moment de la modification...
De même, on ne sais pas si les périodes peuvent se chevaucher et/ou s'il peut y avoir interruption dans les périodes (une période non renseignée, quoi).
3. Pour rester dans ta configuration - et en supposant que les périodes se suivent sans interruption et sans chevauchement - je dirais :
- Récupération des données SQL triées par date de début dans un tableau
- initialisation du prix
- POUR CHAQUE période, SI le prix est le même que la période précédente on prend la nouvelle date de fin
SINON on passe à un nouveau "groupe de périodes"
/* Format du tableau récupérant les données SQL :
$periodes[$i]['début']='30/01/2010';
$periodes[$i]['fin']='06/02/2010';
$periodes[$i]['prix']='300';
*/
// On initialise les variables. $prix_actuel est initialisé à une valeur qu'on est sûr de ne pas retrouver dans le tableau...
$nombre_periodes = count($periodes);
$prix_actuel = NULL;
$groupe = 0;
// On boucle sur le tableau des périodes pour constituer un tableau groupement des périodes en fonction du prix
for ($i = 0, i$i <= $nombre_periodes-1, $i++) {
if ($periodes[$i]['prix'] == $prix_actuel) {
// La période précédente avait le même prix => il suffit de modifier la date de fin de groupement
$groupement[$groupe]['fin'] = $periodes[$i]['fin'];
}
else {
// Le prix de la précédente période n'était pas le même
// => On change de groupe/on crée un nouvel élément du tableau de groupement
// on lui met les valeurs de la période actuelle
// et on met à jour le prix de référence pour les futures comparaisons
$groupe++;
$groupement[$groupe] = $periodes[$i];
$prix_actuel = $periodes[$i]['prix'];
}
}
Bonjour.
1. Comment sont définies les périodes ?
Est-il nécessaire de garder deux périodes distinctes quand elles vérifient les conditions (prix identique + se suivent) ?
Parce qu'il y a peut-être moyen de solutionner le problème au moment de la création/modification des périodes :roll:
2. Il nous manque des infos sur le fonctionnement/la taille des tables.
Si la mise à jour des périodes est occasionnelle et que la consultation est régulière, tu peux avoir intérêt à créer une table qui regroupe les périodes au moment de la modification...
De même, on ne sais pas si les périodes peuvent se chevaucher et/ou s'il peut y avoir interruption dans les périodes (une période non renseignée, quoi).
3. Pour rester dans ta configuration - et en supposant que les périodes se suivent sans interruption et sans chevauchement - je dirais :
- Récupération des données SQL triées par date de début dans un tableau
- initialisation du prix
- POUR CHAQUE période, SI le prix est le même que la période précédente on prend la nouvelle date de fin
SINON on passe à un nouveau "groupe de périodes"
[php]/* Format du tableau récupérant les données SQL :
$periodes[$i]['début']='30/01/2010';
$periodes[$i]['fin']='06/02/2010';
$periodes[$i]['prix']='300';
*/
// On initialise les variables. $prix_actuel est initialisé à une valeur qu'on est sûr de ne pas retrouver dans le tableau...
$nombre_periodes = count($periodes);
$prix_actuel = NULL;
$groupe = 0;
// On boucle sur le tableau des périodes pour constituer un tableau groupement des périodes en fonction du prix
for ($i = 0, i$i <= $nombre_periodes-1, $i++) {
if ($periodes[$i]['prix'] == $prix_actuel) {
// La période précédente avait le même prix => il suffit de modifier la date de fin de groupement
$groupement[$groupe]['fin'] = $periodes[$i]['fin'];
}
else {
// Le prix de la précédente période n'était pas le même
// => On change de groupe/on crée un nouvel élément du tableau de groupement
// on lui met les valeurs de la période actuelle
// et on met à jour le prix de référence pour les futures comparaisons
$groupe++;
$groupement[$groupe] = $periodes[$i];
$prix_actuel = $periodes[$i]['prix'];
}
}[/php]