Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1640 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] champs date et suite de row consecutive...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MySQL] champs date et suite de row consecutive...

n°2163068
mechkurt
Posté le 07-11-2012 à 16:50:54  profilanswer
 

Bonjour,
Voici un schéma de base simplifié :


|   date   |  id | flag |
|2012-01-01|  1  |  1   |
|2012-01-02|  1  |  1   |
|2012-01-03|  1  |  1   |
|2012-01-04|  1  |  1   |
|2012-01-04|  2  |  1   |
|2012-01-05|  1  |  1   |
|2012-01-06|  1  |  0   |
|2012-01-07|  1  |  1   |
|2012-01-08|  1  |  1   |
|2012-01-09|  2  |  1   | <= attention, pas d'enregistrement pour le jour 09 / id 1  
|2012-01-10|  1  |  1   |
|2012-01-11|  1  |  1   |
|2012-01-12|  1  |  1   |


En entré j'ai une date et un id, et je voudrais récupérer la date la plus grande suivant celle entré et ayant un flag non nul
Si on entre 2012-01-01 et id 1 => 2012-01-05
Si on entre 2012-01-07 et id 1 => 2012-01-08
Si on entre 2012-01-10 et id 1 => 2012-01-12
Mais je ne vois vraiment pas comment faire...
 
Actuellement je récupère tout en ordre de date croissant, et en php je remplit un array et je break dès que ce n'est plus bon...
 
Une procédure avec une boucle WHILE DATE_ADD(ma_date, INTERVAL 1 DAY) ?
 
Si vous pensez que c'est la bonne méthode un bout de code (ou un lien vers un tuto) pour savoir comment implémenter ça ne serait pas de refus !
 
Merci d'avance...


Message édité par mechkurt le 07-11-2012 à 17:54:48

---------------
D3
mood
Publicité
Posté le 07-11-2012 à 16:50:54  profilanswer
 

n°2163072
youmoussa
Ecrou-vis
Posté le 07-11-2012 à 16:59:21  profilanswer
 

en decomposant ?

 

Dans un select tu recuperes la date de ton 1er flag=0, et tu utilises cette date pour retourner la 1ere date qui est inférieure et qui a un flag=1 ?

 

en pseudo code:

 

select * from table where flag=1 AND date < ( Select date from TABLE where flag=0 ORDER BY date ASC LIMIT 1) LIMIT 1 ORDER BY date DESC


Message édité par youmoussa le 07-11-2012 à 17:01:12

---------------
Galerie HFR - Photoblog San Francisco - American Cars Photos
n°2163077
mechkurt
Posté le 07-11-2012 à 17:05:48  profilanswer
 

J'ai précisé mon exemple car il y'avait un flou, mais effectivement je crois tenir une piste avec ton raisonnement...


---------------
D3
n°2163081
youmoussa
Ecrou-vis
Posté le 07-11-2012 à 17:10:02  profilanswer
 

Tu peux utiliser la date de ton formulaire un peu de cette manière
 
select * from table where flag=1 AND date < ( Select date from TABLE where flag=0 AND date >= $MY_DATE ORDER BY date ASC LIMIT 1) LIMIT 1 ORDER BY date DESC


---------------
Galerie HFR - Photoblog San Francisco - American Cars Photos
n°2163085
mechkurt
Posté le 07-11-2012 à 17:38:15  profilanswer
 

Oui en faite je vais avoir un problème avec cette technique, c'est que si je n'ai pas d’enregistrement flagé à nul après, je ne récupérerais rien du tout (cf. l'exemple 3 que j'ai ajouté).
Merci quand même, je me trouvais con de ne pas avoir pensé à ça...
 
...mais au final ce n'est pas ce qu'il me faut ! ^^


---------------
D3
n°2163087
KLeMiX
Laisse pas trainer ton site
Posté le 07-11-2012 à 17:52:55  profilanswer
 

select * from table where flag=1 AND date < ( Select COALESCE(date,sysdate) from TABLE where flag=0 AND date >= $MY_DATE ORDER BY date ASC LIMIT 1) LIMIT 1 ORDER BY date DESC
 
en admettant que tes dates sont anciennes sinon tu prends une date dans le future lointain pour etre tranquille


---------------
www.pronovolley.fr Faites vos prono sur la ligue de Volley et défiez vos amis. Des cadeaux en fin d'année  www.levoll.fr
n°2163091
mechkurt
Posté le 07-11-2012 à 17:59:08  profilanswer
 

Même réponse qu'au dessus, dans la mesure ou je veux une dernière date "existante", cherche un enregistrement vide m'entraine droit dans le mur...
 
D’ailleurs je me suis aperçu en cherchant de mon coté que le problème est encore plus compliqué, il faut chercher les flag a zéro ou les lignes manquantes (cf. exemple 2 ci-dessus).
 
Même en php je suis obligé de vérifier qu'il n'y a pas de trou bizarre dans les enregistrements que je récupère...


---------------
D3
n°2163103
youmoussa
Ecrou-vis
Posté le 07-11-2012 à 18:36:26  profilanswer
 

une fonction genre MIN entre une valeure nulle et une date renvoit la date ? /pense à voix haute

 

Sinon, il est clair qu'il va falloir écrire tous les cas avant qu'on ne puisse t'aider plus.


Message édité par youmoussa le 07-11-2012 à 18:37:05

---------------
Galerie HFR - Photoblog San Francisco - American Cars Photos
n°2163156
mechkurt
Posté le 08-11-2012 à 09:44:40  profilanswer
 

Si on trouve une manip qui résout les 3 cas de mon premier post, je pense qu'on sera quasi bon.
Honnêtement à part faire en SQL ce que je fait en PHP, c'est à dire parcourir les lignes dans l'ordre croissant et en interrompant soit quand "on saute un ou plusieurs jours", soit quand on a un flag à zéro, je ne vois vraiment pas ce qui pourrait fonctionner...
 
Mais faire ça en SQL est au dessus de mes compétences et je ne suis pas sur qu'il y ait un gain de performance "globale" significatif !


---------------
D3

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] champs date et suite de row consecutive...

 

Sujets relatifs
Administration Mysql sous EasyPhpTRES URGENT ! suite java
Création d'un tableau html (lignes + colonnes) avec mysqlProblème Connection MySQL sur mon VPS
Difficultés MysqlFunction insérer données texte dans mysql
PowerShell Supprimer Fichier suite à une recherche de chaine de caractFindby Login and password Myeclipse Mysql
[résolu] taper texte dans champs text et affichage dynamiqueRemplir une base MySQL avec une base SQL
Plus de sujets relatifs à : [MySQL] champs date et suite de row consecutive...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR