begin process at 2012 02 12 08:33:21
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

requête mysql compliqué


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

requête mysql compliqué

mercredi 2 juillet 2008 à 17:22:21 | requête mysql compliqué

gosu14

Bonjour,
Je suis un novice en php/mysql et je suis devant un léger problème. J'ai une base SMIC qui ressemble a cela :

id    taux       DateDebut          DateFin
1     8.27      2006-07-01       2007-06-30
2     8.44      2007-07-01       2008-04-30
3     8.63      2008-05-01       2009-07-31

Voila j'aimerais récupérer le taux pour une année, je m'explique : la fonction qui utilisera cette requête aura l'année en paramètre donc par exemple si l'année est 2008, il y un changement de taux, donc j'aimerai récupérer les 2 taux différents.

En gros il faut faire une requête qui test si il y a un changement dans l'année, puis qui renvoi ensuite le ou les taux . A quoi ressemble cette requête ?
Merci pour vos réponses.
mercredi 2 juillet 2008 à 23:27:31 | Re : requête mysql compliqué

PlayerMania

Bin avec qqch du style qui te récupère tous les taux selon ton année
SELECT taux FROM matable WHERE annee = 2007;
$mes_taux = mysql_fetch_array();

Ensuite tu boucle sur ton tableau $mes_taux pour tous les rechopper, éventuellement en sortir une moyenne ou ce que tu veux
$i=0;
$size=count($mes_taux);
while($i < $size)
    {
    echo $mes_taux[$i];
    $i++;
    }


Faire cela juste avec une seul requete est surement bien sure possible, mais je doute que les performance soit terrible....
jeudi 3 juillet 2008 à 19:01:05 | Re : requête mysql compliqué

neigedhiver

Salut,

@Playermania : gosu a pris soin de préciser à quoi ressemble sa table, la requête que tu proposes n'est donc pas franchement adaptée, puisque tu utilises un champ (annee) qu'il n'a pas...

SELECT taux FROM table_smic WHERE DateDebut LIKE '2008%' OR DateFin LIKE '2008%';

Après, un traitement normal du résultat avec mysql_fetch_*****()


Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
jeudi 3 juillet 2008 à 22:11:40 | Re : requête mysql compliqué

JoJo738

Membre Club
Hello,

Tu peux aussi utiliser les fonctions DATE

Par exemple : SELECT id, taux, DateDebut, DateFin FROM ta_table WHERE YEAR(DateDebut) = 2008 OR YEAR(DateFin) = 2008
Tu récuperrera tous les enregistrements de l'année 2008

Si ma reponse te convient, merci de l'accepter ! 
vendredi 4 juillet 2008 à 09:27:57 | Re : requête mysql compliqué

PlayerMania

@neigedhiver, j'ai prend soin expret d'essayer de ne pas donner une réponse toute cru, c'est la moindre des choses que l'intéréssé y mette un peu de sa réflexion.

JoJo738 nous sort la plus belle requete aussi, en espérant qu'il n'y ai pas plus de 2-3 taux par an.

vendredi 4 juillet 2008 à 21:49:57 | Re : requête mysql compliqué

JoJo738

Membre Club
(Arf, erreur avec la TextBox :s Retour en textarea ^^)

Par contre, je ne sais pas, mais la meilleur solution serait peut-être de trouver les années correspondants aux intervalles ... Car si on saute un an (imaginons), il n'y a aucun résultats pour 2008 ...

Je verrais peut être un TO_DATE() ?? ou une autre fonction SQL ... je vais aller voir sur la doc :s


samedi 5 juillet 2008 à 00:11:28 | Re : requête mysql compliqué

JoJo738

Membre Club
Ahhh !

En cherchant un peu ... j'ai réussi à faire ça :

SELECT
  id,
  taux,
  DateDebut,
  DateFin
FROM
  ta_table
WHERE
  TO_DAYS( STR_TO_DATE( '2008-01-01', '%Y-%d-%m' ) ) - TO_DAYS( DateDebut )
    BETWEEN
        - DAYOFYEAR(STR_TO_DATE( '2008-31-12', '%Y-%d-%m' ) )
      AND
        DATEDIFF( DateFin, DateDebut )


Etudions la requête ...

- STR_TO_DATE( '2008-01-01', '%Y-%m-%d' )
-> Converti la date 2008-01-01 (Y-m-d) en date DATETIME (AAAA-MM-JJ). Ce qui correspond au 1er jour de l'année 2008 (ou année recherchée)

- TO_DAYS
-> convertie la date en jours (nombre de jours depuis l'année 0)

- "- DAYOFYEAR(STR_TO_DATE( '2008-31-12', '%Y-%d-%m' ) )" correspond au nombre de jours dans l'année recherchée
- "DATEDIFF( DateFin, DateDebut )" c'est la différence (en jours) entre les deux dates (toujours positif)
- "TO_DAYS( STR_TO_DATE( '2008-01-01', '%Y-%d-%m' ) ) - TO_DAYS( DateDebut )" est la différence entre les dates du 1er de l'année recherchée et la DateDebut

Bref, on cherche toutes la valeurs ou cette dernière différence soit comprise entre moins le nombre de jour dans l'année (365 OU 366) et la différence des deux dates.
ce qui nous permet de récupérer les valeurs ou l'année recherchée est comprise entre les deux dates (possibilité de faire des saut d'années (2007 -> 2009 -> 2020 [etc ...])


Et sinon, tu peux faire ça (plus simple pour la gestion je trouve) :

SET @annee = '2008'; SELECT
  id,
  taux,
  DateDebut,
  DateFin,
  @annee as annee
FROM
  test_date
WHERE
  TO_DAYS( STR_TO_DATE( CONCAT(@annee, '-01-01'), '%Y-%d-%m' ) ) - TO_DAYS( DateDebut )
    BETWEEN
        - DAYOFYEAR(STR_TO_DATE( CONCAT(@annee, '-31-12'), '%Y-%d-%m' ) )
      AND
        DATEDIFF( DateFin, DateDebut )

( tout dans le même mysql_query() ;) )


Note (post précédent) : TO_DATE() pour Oracle, et STR_TO_DATE() est son homologue en MySQL
samedi 5 juillet 2008 à 01:04:12 | Re : requête mysql compliqué

gosu14

Merci, pour cet échange c'est très constructif je pense que la réponse final ressemble le plus à ce que je veux faire, je vais tester tout cela ! Merci de votre aide ;) !


Cette discussion est classée dans : mysql, requête, taux, année, compliqué


Répondre à ce message

Sujets en rapport avec ce message

Mysql besoin d'aide pour une requête [ par redpooka ] J'ai besoin de faire une requête en mysql qui me permettrait de compter certaines colonnes avec des conditions.Du style (code incorrect, mais compréhe Menu déroulant à partir d'une requête mysql [ par tweeder ] Bonjour,J'ai essayé de trouver sur le site un exemple pour ma question mais j'ai pas trouvé. J'aimerais généré un menu déroulant html à partir des élé -Requête a l'intérieur d'une requête !!??! [ par kodiask ] ALors mon problème est que jai un système de news mai celui-ci est disposer de cette sorte :Date - Titre (nb de comentaires)lorsque l'on clik sur le t exécution automatique requête mysql [ par sann ] Bonjour, Je voudrais savoir s'il y a un moyen d'exécuter automatiquement une requête Mysql à une heure précise avec Php/Mysql. Merci de votre aide. Requête Mysql IN [ par tahiti_bob ] Bonjour,Lorsque j'utilise la requête IN:DELETE FROM messages WHERE idmess IN ("1234","4567","ABCDE")Seul les deux premiers sont supprimés. Est ce qu'i Requête SQL [ par lagombe ] Bonjour à tous,voilà, j'ai une requête SQL qui me renvoie 5 lignes quand je l'éxécute avec phpmyadmin puis lorsque je l'utilise dans du code php (avec Additionner le résultat d'une requête MySQL [ par djpunk ] Je fais une requête sur ma base SQL du style :$d = mysql_query("SELECT * FROM articles WHERE type='$type' AND idtype='$id'");et j'aurais voulu savoir problème de requête [ par brice57 ] Bonjour, j'ai un problème avec la requête suivante que je ne parviens pas à exécuter sur une base Mysql:$query = "DELETE FROM Defi WHERE Passteam=".$p un lien qui indique à MySQL la requête à afficher [ par pyranhaz ] Bonjour,Cela semblait simple au départ, mais quand on est un néophyte, on sy perd rapidement :-sJ'ai un formulaire de recherche qui utilise MySQLquan Page multiples dans résultats MySQL [ par pyranhaz ] Bonjour,Existe-il une astuce simple pour que lorsque je fais une requête MySQL sur mon site on m'affiche les pages contenant au maximum 25 résultats p


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,640 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales