2016-09-10 3 views
0

Я застрял в этой ситуации и не знаю, как написать запрос выбора, который приводит к тому, что я хочу. здесь ситуацияSQL - как присоединиться к 3 таблицам и выбрать количество столбцов

У меня есть 3 таблицы сессии, запрос, журнал

сессия таблицы

# session table to store sessions data 
ID  user 
------------ 
1  John 
2  Sarah 

запрос таблицы

# request table to store `http` requests come to me 
ID  session 
------------ 
1  1 
2  1 
3  1 
4  1 
5  2 
6  NULL 

таблицы журнала

# log table to store the logs that I record in my php code and store_ 
# them in the database while processing the requests 
ID  request 
------------ 
1  1 
2  1 
3  2 

То, что я хочу, чтобы выбрать каждую сессию и количество запросов, сделанных в этой сессии, а также его количество журналов. Я хочу, чтобы результат

#sessions result 
+----+-------+----------+------+ 
| ID | USER | requests | logs | 
+----+-------+----------+------+ 
| 1 | John | 4  | 3 | 
+----+-------+----------+------+ 
| 2 | Sarah | 1  | NULL | 
+----+-------+----------+------+ 

Что я это я использую соединения и группы по сессии Как

select session.*,count(request.id) as requests,count(log.id) as logs 
from session left join request on session.id=request.session 
left join log on request.id=log.request group by session.id 

проблема, когда я делаю это, если один запрос имеет более чем 1 log, он будет дублироваться соединением как запрос 1 в нашей ситуации, который имеет журналы 1 и 2

# wrong result !! not what I want. notice the count of requests in session 1 
+----+-------+----------+------+ 
| ID | USER | requests | logs | 
+----+-------+----------+------+ 
| 1 | John | ((5)) | 3 | 
+----+-------+----------+------+ 
| 2 | Sarah | 1  | NULL | 
+----+-------+----------+------+ 

Что я здесь делаю неправильно?

благодаря

ответ

1
select session.*,count(DISTINCT request.id) as requests,count(log.id) as logs 
from session left join request on session.id=request.session 
left join log on request.id=log.request group by session.id 
+0

что я могу сказать? DISTINCTTTTTTTTTT спасибо вам большое –

1

Просто попробуйте поймать мой подход. Я не компилирую запрос. мне нужно, чтобы выделить этот один

(select count(*) from log where request.id=log.request) 

Полный SQL

select session.id,session.user,count(request.id) as requests,logs from (
select session.*,(select count(*) from log where request.id=log.request) as  
logs from sesson join 
request on sesson.id=request.sesson group by request.id 
)group by session.id 
+0

спасибо, сэр за ваше время, я попробую ваш подход –

Смежные вопросы