Задать вопрос
@Preci

Как составить mysql запрос который выведет посты по скачиваниям за промежуток времени из определенной категории?

Здравствуйте!
Есть таблица со скачиваниями wp_day_download, которая имеет вид:
post_id | date | dl
1 | 2016-03-08 | 332
2 | 2016-03-08 | 123
1 | 2016-03-07 | 322
2 | 2016-03-07 | 234
1 | 2016-03-06 | 234
т.е. для каждого поста есть количество скачиваний за дату

Получаю самые скачиваемые посты за неделю таким запросом:
SELECT post_id, SUM(dl) FROM wp_day_download WHERE date>=DATE_ADD(CURRENT_TIMESTAMP,INTERVAL -7 DAY) GROUP BY post_id


Есть таблица: wp_term_relationships которая имеет вид:

object_id | term_taxonomy_id | term_order
1 | 23 | 0
2 | 23 | 0

т.е. тут object_id = post_id и term_taxonomy_id = какой-то ID

И есть 3я таблица: wp_term_taxonomy в которой:

term_taxonomy_id | term_id

какой-то ID | id категории

Вопрос:

Как изменить мой запрос выше, что бы он выводил не все посты по скачиваниям за период, а только те, для которых term_id = <какая-то категория>

upd

Извиняюсь, вначале накосячил, думал что ID категории лежит в таблице wp_term_relationships, а оказалось нет...

Т.е. мне надо:

1. Из таблицы wp_term_taxonomy взять term_taxonomy_id если term_id = <МОЁ число>
2. Сравнить результат моего запроса выше с таблицей wp_term_relationships что бы совпало post_id из моего запроса с object_id и term_taxonomy_id (из пункта 1)

Может можно как то по другому и я криво объясняю...
  • Вопрос задан
  • 378 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@nozzy
Symfony, Laravel, SQL, Python, Telegram
SELECT t1.post_id, SUM(t1.dl)
FROM wp_day_download t1
INNER JOIN wp_term_relationships t2 ON t2.object_id = t1.post_id
INNER JOIN wp_term_taxonomy t3 ON t3.term_taxonomy_id = t2.term_taxonomy_id
					                     AND t3.term_id = 179
WHERE t1.date >= DATE_ADD(CURRENT_TIMESTAMP,INTERVAL -7 DAY) 
GROUP BY t1.post_id
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Preci Автор вопроса
Методом научного тыка дошел до результата:

SELECT post_id, SUM(dl)
FROM wp_day_download
WHERE date>=DATE_ADD(CURRENT_TIMESTAMP,INTERVAL -7 DAY) 
AND post_id IN  (
	SELECT object_id
	FROM wp_term_relationships
	WHERE term_taxonomy_id = (
    
		SELECT term_taxonomy_id
		FROM wp_term_taxonomy
		WHERE term_id = 179 )
	) 
GROUP BY post_id


Вроде как он работает. Но я не удивлюсь что это криво и можно как то "производительнее"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы