Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / JOIN c подзапросом и подсчётом количества строк / 15 сообщений из 15, страница 1 из 1
27.11.2014, 10:52:18
    #38818166
Pppvas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN c подзапросом и подсчётом количества строк
Добрый день!

Есть таблица с записями.
Получаем из неё записи так:
SELECT * FROM _USER_POSTS WHERE USER_ID='XX' and STATUS='check' ORDER BY DATE ASC;

Есть таблица, в которой собраны все действия над записью. Получаем их так:
SELECT * FROM _POST_ACTIONS WHERE POST_ID='XX';

Есть необходимость вывести все записи с посчитанным количеством действий над записью.
Всю голову сломал, как это реализовать через JOIN.

Заранее благодарен за помощь!
...
Рейтинг: 0 / 0
27.11.2014, 11:13:54
    #38818188
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN c подзапросом и подсчётом количества строк
Код: sql
1.
2.
3.
4.
5.
SELECT COUNT(DISTINCT post_actions.post_id) postCount,  COUNT(DISTINCT post_actions.id) postActions
FROM user_posts, post_actions 
WHERE user_posts.id = post_actions.post_id
AND [остальные условия отбора]
GROUP BY [в каком разрезе нужна статистика]
...
Рейтинг: 0 / 0
27.11.2014, 11:23:59
    #38818196
Pppvas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN c подзапросом и подсчётом количества строк
Akina,

Нужно количество действий отдельно по каждому посту. И таких постов могут быть сотни.

Сейчас, это висит так:
SELECT * FROM _USER_POSTS WHERE USER_ID='XX' and STATUS='check' ORDER BY DATE ASC;

а затем
while(){
SELECT COUNT(*) FROM _POST_ACTIONS WHERE POST_ID='XX';
}

Работать эта жуть может пару минут, что просто кошмарно.
...
Рейтинг: 0 / 0
27.11.2014, 12:32:03
    #38818259
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN c подзапросом и подсчётом количества строк
PppvasНужно количество действий отдельно по каждому посту. И таких постов могут быть сотни.Да хоть миллионы. Сформулируй правильно критерий группировки и построй необходимые выражения отбора и группировки (и, возможно, второго отбора).

PppvasРаботать эта жуть может пару минут, что просто кошмарно.Вот ведь странность - если сделать через задницу, то и работает через задницу... с чего бы?
...
Рейтинг: 0 / 0
27.11.2014, 19:44:26
    #38818783
Pppvas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN c подзапросом и подсчётом количества строк
авторДа хоть миллионы. Сформулируй правильно критерий группировки и построй необходимые выражения отбора и группировки (и, возможно, второго отбора).

Да, вы правы. Заработало. Но с одним недостатком. Записи, где COUNT(post_actions.id) = 0 - не попадают в выборку. Можно в рамках этого запроса устранить эту проблему? Меня всё время тянет на LEFT JOIN...


авторВот ведь странность - если сделать через задницу, то и работает через задницу... с чего бы?
Конечно через задницу. Но увы, оно уже так написано, и было написано до меня.
...
Рейтинг: 0 / 0
27.11.2014, 20:11:58
    #38818802
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN c подзапросом и подсчётом количества строк
PppvasавторДа хоть миллионы. Сформулируй правильно критерий группировки и построй необходимые выражения отбора и группировки (и, возможно, второго отбора).

Да, вы правы. Заработало. Но с одним недостатком. Записи, где COUNT(post_actions.id) = 0 - не попадают в выборку. Можно в рамках этого запроса устранить эту проблему? Меня всё время тянет на LEFT JOIN...


авторВот ведь странность - если сделать через задницу, то и работает через задницу... с чего бы?
Конечно через задницу. Но увы, оно уже так написано, и было написано до меня.

ничего не через задницу. скл просто надо выучить основы!!! и будет счастье

джоин заменить не left join
...
Рейтинг: 0 / 0
27.11.2014, 20:16:34
    #38818805
Pppvas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN c подзапросом и подсчётом количества строк
alex564657498765453,

А где вы здесь:
авторSELECT COUNT(DISTINCT post_actions.post_id) postCount, COUNT(DISTINCT post_actions.id) postActions
FROM user_posts, post_actions
WHERE user_posts.id = post_actions.post_id
AND [остальные условия отбора]
GROUP BY [в каком разрезе нужна статистика]

видите JOIN?
...
Рейтинг: 0 / 0
27.11.2014, 20:45:24
    #38818827
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN c подзапросом и подсчётом количества строк
PppvasА где вы здесь видите JOIN?
Это INNER JOIN. Вообще-то. И то, что именно этих слов в песне нету, ничего не меняет.
...
Рейтинг: 0 / 0
27.11.2014, 21:02:22
    #38818839
Pppvas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN c подзапросом и подсчётом количества строк
Akina,

Переписал так:

Код: sql
1.
2.
3.
4.
5.
SELECT user_posts.id ,  COUNT(post_actions.id) postActions
FROM user_posts
LEFT JOIN post_actions ON user_posts.post_id = post_actionspost_id 
WHERE user_posts.user_id = 'ZZ' AND user_posts.status = 'checked'
GROUP BY user_posts.id



Это корректно?
...
Рейтинг: 0 / 0
27.11.2014, 21:05:43
    #38818844
Pppvas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN c подзапросом и подсчётом количества строк
Проблема в том, что мой вариант с LEFT JOIN выполняется более 10 секунд. А ваш за 0.3
...
Рейтинг: 0 / 0
28.11.2014, 04:21:16
    #38818958
sigmov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN c подзапросом и подсчётом количества строк
Pppvas,
Код: sql
1.
2.
3.
4.
5.
SELECT 
  user_posts.id ,  
  COUNT(SELECT * FROM post_actions  WHERE post_actions.post_id = user_posts.post_id) postActions
FROM user_posts
WHERE user_posts.user_id = 'ZZ' AND user_posts.status = 'checked'


И сделай индекс на post_actions.post_id, если его там нет
...
Рейтинг: 0 / 0
28.11.2014, 10:24:35
    #38819109
Pppvas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN c подзапросом и подсчётом количества строк
sigmov,

авторSELECT
user_posts.id ,
COUNT(SELECT * FROM post_actions WHERE post_actions.post_id = user_posts.post_id) postActions
FROM user_posts
WHERE user_posts.user_id = 'ZZ' AND user_posts.status = 'checked'

Ругается на синтаксис. Пробовал даже так написать:

Код: sql
1.
2.
3.
4.
5.
SELECT 
  user_posts.id ,  
  COUNT(SELECT * FROM post_actions  WHERE post_actions.post_id = 888) postActions
FROM user_posts
WHERE user_posts.user_id = 'ZZ' AND user_posts.status = 'checked'
...
Рейтинг: 0 / 0
28.11.2014, 11:11:12
    #38819190
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN c подзапросом и подсчётом количества строк
Pppvasalex564657498765453,

А где вы здесь:
авторSELECT COUNT(DISTINCT post_actions.post_id) postCount, COUNT(DISTINCT post_actions.id) postActions
FROM user_posts, post_actions
WHERE user_posts.id = post_actions.post_id
AND [остальные условия отбора]
GROUP BY [в каком разрезе нужна статистика]

видите JOIN?

сдесь нет а в этих словах ДА

Есть необходимость вывести все записи с посчитанным количеством действий над записью.
Всю голову сломал, как это реализовать через JOIN.
...
Рейтинг: 0 / 0
28.11.2014, 11:12:21
    #38819193
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN c подзапросом и подсчётом количества строк
Pppvas
Код: sql
1.
COUNT(SELECT * FROM

Код: sql
1.
(SELECT COUNT(*) FROM
...
Рейтинг: 0 / 0
28.11.2014, 11:13:16
    #38819196
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JOIN c подзапросом и подсчётом количества строк
Код: sql
1.
2.
3.
4.
select u.iduser,count(d.idfolder)
from
	users u left join folders d on (d.fk_iduser = u.iduser)
group by u.iduser



переиначишь под себя, я вчера тестил по твоей теме, ещо остался в клиенте...

да, тут уже в соседней ветке нащёт скорости, столкнулись с тем, что

вариант с джоином медленее чем вложеный под запрос с подщётом количества
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / JOIN c подзапросом и подсчётом количества строк / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]