как я не могу выбрать из MySQL без дублирования - PullRequest
0 голосов
/ 16 декабря 2009

моя проблема слишком сложна

теперь у меня есть files таблица

Я выбрал из него файлы, которые были добавлены за последние семь дней. он возвращает много идентификаторов, как 1,2,3,4,5 хорошо это великолепно. Теперь проблема:

у меня есть tutorial стол

каждый tutorial имеет несколько файлов files таблица

теперь я выбрал из files, который последний раз добавлялся за 7 дней

и составить список по файлам, загруженным count desc и после этого я выбираю из tutorial, который равен идентификатору учебника в таблице files это значит

files_id tutorial_id
   1          2

files_id tutorial_id
   2          2

это означает, что два файла в одном уроке

сейчас учебник

tut_id tut_title
 1        tite test

скачано за последние семь дней по списку файлов

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

Это означает, что у меня есть один учебник и два файла в списке самых скачиваемых дублирует название учебника дважды.

это действительно сложно.

Ответы [ 3 ]

2 голосов
/ 16 декабря 2009
1 голос
/ 16 декабря 2009

Если я вас правильно понимаю, вы, в основном, хотите перечислить учебники , наиболее загруженные, по сравнению с файлами , наиболее загруженными.

В этом случае вы можете использовать следующий запрос для получения 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;

Вы можете изменить MAX на SUM в зависимости от того, как вы хотите рассчитать количество загрузок для учебника.

То же самое, но ограничивается файлами, добавленными за последние 7 дней:

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;

Если это не то, что вы хотите, извините. Ваш вопрос очень неясен.

0 голосов
/ 16 декабря 2009

Используйте Limit 1, чтобы получить самый верхний ряд после заказа. Это вернет только первую строку, которая является наиболее загружаемым файлом (помните, что вы заказали его, поэтому наиболее загружаемый файл будет в верхней части).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...