Mysql объединить множество таблиц в огромной базе данных - PullRequest
0 голосов
/ 09 февраля 2012

это мой первый пост здесь. Мне нужно создать фид, такой как Facebook, с большим количеством информации, такой как регистрация пользователей, фотографии, значки и т. Д. Мне нужна помощь, чтобы создать только один запрос для этого. Как я могу сделать, чтобы создать соединение с этим?

select reviews.id_user, reviews.id, reviews.review
from reviews
where reviews.id_user in (1,2,3,4,5)
order by reviews.created_time desc;

select placespops.id_user, placespops.id, placespops.id_pop
from placespops
where placespops.id_user in (1,2,3,4,5)
order by placespops.created_time desc;

select usersfoursquarecheckins.id_user, usersfoursquarecheckins.id
from usersfoursquarecheckins
where usersfoursquarecheckins.id_user in (1,2,3,4,5)
order by usersfoursquarecheckins.created_time desc;

select usersfacebookcheckins.id_user, usersfacebookcheckins.id
from usersfacebookcheckins
where usersfacebookcheckins.id_user in (1,2,3,4,5)
order by usersfacebookcheckins.created_time desc;

select placesphotos.id_user, placesphotos.id
from placesphotos
where placesphotos.id_user in (1,2,3,4,5)
order by placesphotos.created_time desc;

select usersbadges.id_user, usersbadges.id
from usersbadges
where usersbadges.id_user in (1,2,3,4,5)
order by usersbadges.created_time desc;

Вопрос в том, как объединить все в одном запросе?

Ответы [ 2 ]

0 голосов
/ 09 февраля 2012

Примерно так:

    SELECT r.id_user rid_user, r.id rid, r.review
          , p.id pid, p.id_pop
          , ufsq.id_user ufsqid_user, ufsq.id ufsqid
          , ufbk.id_user ufbkid_user, ufbk.id ufbkik
          , pp.id_user ppid_user, pp.id ppid
          , ub.id_user ubid_user, ub.id ubid
       FROM reviews r
 INNER JOIN placespops p ON r.id_user = p.id_user
 INNER JOIN usersfoursquarecheckins ufsq ON r.id_user = ufsq.id_user
 INNER JOIN usersfacebookcheckins ufbk ON r.id_user = ufbk.id_user
 INNER JOIN placesphotos pp ON r.id_user = pp.id_user
 INNER JOIN usersbadges ub ON r.id_user = ub.id_user

      WHERE r.id_user IN (1,2,3,4,5)
   ORDER BY reviews.created_time desc;

Это гораздо эффективнее и проще в управлении, чем огромный UNION

0 голосов
/ 09 февраля 2012

В этом случае, похоже, что самый простой способ сделать это - объединить наборы результатов - например, так:

select reviews.id_user, 
       reviews.created_time, 
       reviews.id review_id, 
       reviews.review, 
       null placespop_id, 
       null id_pop,
       null usersfoursquarecheckin_id,
       null usersfacebookcheckins_id,
       null placesphotos_id,
       null usersbadges_id
from reviews
where reviews.id_user in (1,2,3,4,5)
union all
select placespops.id_user, 
       placespops.created_time, 
       null review_id, 
       null review, 
       placespops.id placespop_id, 
       placespops.id_pop,
       null usersfoursquarecheckin_id,
       null usersfacebookcheckins_id,
       null placesphotos_id,
       null usersbadges_id
from placespops
where placespops.id_user in (1,2,3,4,5)
union all
select usersfoursquarecheckins.id_user, 
       usersfoursquarecheckins.created_time, 
       null review_id, 
       null review, 
       null placespop_id, 
       null id_pop, 
       usersfoursquarecheckins.id usersfoursquarecheckin_id,
       null usersfacebookcheckins_id,
       null placesphotos_id,
       null usersbadges_id
from usersfoursquarecheckins
where usersfoursquarecheckins.id_user in (1,2,3,4,5)
union all
select usersfacebookcheckins.id_user, 
       usersfacebookcheckins.created_time,
       null review_id, 
       null review, 
       null placespop_id, 
       null id_pop, 
       null usersfoursquarecheckin_id,
       usersfacebookcheckins.id usersfacebookcheckins_id,
       null placesphotos_id,
       null usersbadges_id
from usersfacebookcheckins
where usersfacebookcheckins.id_user in (1,2,3,4,5)
union all
select placesphotos.id_user, 
       placesphotos.created_time,
       null review_id, 
       null review, 
       null placespop_id, 
       null id_pop, 
       null usersfoursquarecheckin_id,
       null usersfacebookcheckins_id,
       placesphotos.id placesphotos_id,
       null usersbadges_id
from placesphotos
where placesphotos.id_user in (1,2,3,4,5)
union all
select usersbadges.id_user,
       usersbadges.created_time,
       null review_id, 
       null review, 
       null placespop_id, 
       null id_pop, 
       null usersfoursquarecheckin_id,
       null usersfacebookcheckins_id,
       null placesphotos_id,
       usersbadges.id usersbadges_id
from usersbadges
where usersbadges.id_user in (1,2,3,4,5)
order by 2 desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...