Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/07/2011, 12h30   #1
Invité de passage
 
Inscription : juillet 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 3
Points : 0
Points : 0
Par défaut Aide a la creation de requette complexe (ou pas)

Bonjour a tous,

J'essaye actuellement de creer une requete reccuperant des donnees sur trois tables differentes.

La premiere table, appelons la users, contient un id, et un nom
La deuxieme, appelons la liaison, contient users_id et table3_id
La derniere, appelons la table3, contient un son id, et un champs date en datetime, et des informations superflu dans notre cas

Le but, est de reccuperer les 10 users qui ont le plus de champs dans la table3 sur la derniere semaine, et dans le cas ou il n'y en a moins de 10, agrandir cette derniere semaine a un delai plus long, pour avoir a chaque moment 10 resultats.

J'ai galerer pas mal, fait des recherches sur google, mes requettes ne fonctionnent pas.

En esperant que qqn puisse m'aiguiller,
Merci d'avance !
Cordialement
kenny75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 12h37   #2
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Pourriez vous postez vos requetes, afin d'avoir une idée sur votre méthode ?

Cordialement
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 12h52   #3
Invité de passage
 
Inscription : juillet 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 3
Points : 0
Points : 0
Je voyais quelque chose dans ce genre:

Code :
SELECT COUNT(t.id), u.name FROM table3 AS t, liaison AS l, user AS u WHERE TO_DAYS(NOW()) - TO_DAYS(t.begin_date) <= 100 AND t.id = l.table3_id LIMIT 10
sans succès...
kenny75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 14h52   #4
Invité de passage
 
Inscription : juillet 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 3
Points : 0
Points : 0
Je me permet de completer mon post en detaillant d'avantage mes tables:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
TABLE user:
 
id - int
name - varchar
 
-------------------
 
TABLE link
 
id_user - int
id_tab3 - int
 
-------------------
 
TABLE tab3
 
id - int
begin_date - datetime
Je souhaite donc reccuperer 10 users, en les classant par le nombre d'element poste dans tab3 de la derniere semaine (la table link servant a savoir quel element poste correspond a quel user).

Cordialement
kenny75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 18h43   #5
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Sur la période la semaine dernière, qu'est ce que ça donne :
Code :
1
2
3
4
5
6
7
8
SELECT u.name, COUNT(*) AS nb
  FROM user AS u
  JOIN liaison AS l ON l.id_user = u.id
  JOIN table3 AS t  ON t.id = l.id_tab3 
 WHERE YEARWEEK(t.begin_date,1) = YEARWEEK(DATE_SUB(CURRENT_TIMESTAMP interval 7 day),1)
 GROUP BY u.name
 ORDER BY nb DESC, u.name
 LIMIT 10
Mais s'il faut rajouter des users sur une période élargie non détermineée c'est plus compliqué car il faut choisir la période avant d'exécuter la requête.
Donc essaie peut être sans filtrer la période, mais en dénombrant les lignes sur la période semaine précédente et nombre total, quelque chose comme :
Code :
1
2
3
4
5
6
7
8
SELECT u.name, COUNT(*) AS nb,
       sum(case when YEARWEEK(t.begin_date,1) = YEARWEEK(DATE_SUB(CURRENT_TIMESTAMP interval 7 day),1) then 1 end) AS nb_semaine
  FROM user AS u
  JOIN liaison AS l ON l.id_user = u.id
  JOIN table3 AS t  ON t.id = l.id_tab3
 GROUP BY u.name
 ORDER BY nb_semaine DESC, nb DESC, u.name
 LIMIT 10
Niveau perf c'est probablement pas terrible de ne pas filtrer les données, il serait préférable de déterminer une période, comme 2 semaines ou 1 mois.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h37.


 
 
 
 
Partenaires

Hébergement Web