2009-12-16 5 views
0

mon problème est trop complexecomment je ne peux pas choisir parmi MySQL sans duplication

maintenant j'ai files Table

I choisi parmi les fichiers, il a ajouté dans sept derniers jours. il renvoie beaucoup d'identifiants comme 1,2,3,4,5 ok c'est génial. Maintenant, le problème:

j'ai tutorial Table

chaque tutorial a quelques fichiers de files tableau

maintenant je choisis parmi files qui dernière ajouté de 7 jours

et faire la liste ordonnée par les fichiers téléchargés compte descendre et après je choisis de tutorial qui égaler ID tutoriel dans le files tableau cette moyenne

files_id tutorial_id 
    1   2 

files_id tutorial_id 
    2   2 

cela signifie deux fichiers dans un tutoriel

maintenant le tutoriel

tut_id tut_title 
1  tite test 

téléchargé dans sept derniers jours par la liste des fichiers

file_id = 1 this mean tutorial id = 2 
file_id = 2 this mean tutorial id = 2 

Cela signifie que j'ai un tutoriel et deux fichiers dans la liste la plus téléchargée dupliqueront le titre du didacticiel deux fois.

c'est vraiment complexe.

+3

Malheureusement, je ne comprends pas la question. Pourriez-vous fournir les mises en page de votre table, des exemples de code et une explication plus claire de ce que vous essayez de faire? – houmam

+2

Blimey. Recommencez, reformulez! – Skilldrick

+0

Quelle est votre question? – Tebo

Répondre

1

Si je vous comprends bien, vous voulez essentiellement à la liste des tutoriels plus téléchargé par rapport aux fichiers les plus téléchargés.

Dans ce cas, vous pouvez utiliser la requête suivante pour obtenir le TOP 10:

SELECT tutorials.tut_id, 
     tutorials.tut_title, 
     MAX(files.file_downloads) AS tut_downloads 
    FROM tutorials, tutorial_files, files 
    WHERE tutorials.tut_id = tutorial_files.tut_id 
    AND files.file_id = tutorial_files.file_id 
    GROUP BY tutorials.tut_id, tutorials.tut_title 
    ORDER BY tut_downloads DESC 
    LIMIT 10; 

Vous pouvez modifier la MAX par un SUM selon la façon dont vous voulez calculer le nombre de téléchargements par-tutorial.

mêmes, mais il limite aux fichiers ajoutés dans les 7 derniers jours:

SELECT tutorials.tut_id, 
     tutorials.tut_title, 
     MAX(files.file_downloads) AS tut_downloads 
    FROM tutorials, tutorial_files, files 
    WHERE tutorials.tut_id = tutorial_files.tut_id 
    AND files.file_id = tutorial_files.file_id 
    AND files.file_added >= DATE_SUB(NOW(), INTERVAL 7 DAYS) 
    GROUP BY tutorials.tut_id, tutorials.tut_title 
    ORDER BY tut_downloads DESC 
    LIMIT 10; 

Si cela n'est pas ce que vous voulez, je suis désolé. Votre question est très floue.

2
+0

oh mon dieu je sais que s'il vous plaît lire bien –

+0

S'il vous plaît montrer plus de code. Et dites ce que vous attendez? –

+2

@Moustafa Pas d'offense mais votre anglais n'est pas parfait et il est difficile de comprendre votre question. Nulle part ne mentionnez quoi que ce soit au sujet de l'essai de SELECT DISTINCT donc la réponse de Dmitry semble assez valide. Il serait très utile que vous fournissiez des exemples de données réelles, des données attendues et des exemples de requêtes que vous utilisez. –

0

Utilisez Limit 1 pour obtenir le rang le plus élevé après la commande. Cela ne renverra que la première ligne, qui est le fichier le plus téléchargé (rappelez-vous que vous l'avez commandé, donc le fichier le plus téléchargeable sera en haut).

Questions connexes