将两个查询合二为一

时间:2013-03-05 11:21:57

标签: mysql sql

我从多个表中获取数据。   并试图solve this

最后我收到两个问题

1)获取用户消息的相关数据。

2)获取所有评论及其详细信息。

我想在一个查询中组合这两个查询。

查询1)

SELECT user_messages.messageid,user_messages.message,
user_messages.sentby,user_messages.visibility,

GROUP_CONCAT( post_images.image_id SEPARATOR ';')
AS  `POST_IMG_ID`,


GROUP_CONCAT( post_images.small_pic_path SEPARATOR ';')
AS 'POST_IMG_PATH',

(
  SELECT count(*) FROM likes
  WHERE element_id=user_messages.messageid
  )AS 'TOTAL_LIKES',

smsusers.fname as 'SENTBY_FNAME',
smsusers.lname as 'SENTBY_LNAME',
profile_pic.small_pic_path as 'SENTBY_SMALL_PIC_PATH'

FROM user_messages
      INNER JOIN smsusers ON
        user_messages.SENTBY = smsusers.id
 INNER JOIN profile_pic ON
 user_messages.SENTBY = profile_pic.userid
left outer JOIN post_images ON
user_messages.messageid=post_images.messageid
WHERE user_messages.userid='1'
GROUP BY user_messages.messageid
order by user_messages.adddate

其工作链接为Sql Fiddle

查询2)

SELECT comments.comment_id, comments.comment, comments.comment_date,
smsusers.fname ,smsusers.lname,profile_pic.small_pic_path  
FROM comments, smsusers , profile_pic , user_messages 
WHERE user_messages.messageid = 'm1'
AND user_messages.userid = smsusers.id
AND smsusers.id = profile_pic.userid
ORDER BY comment_date
LIMIT 0, 10;

工作链接为Sql Fiddle

1 个答案:

答案 0 :(得分:0)

使用查询并删除从属子查询

SELECT user_messages.messageid,
       user_messages.message,
       user_messages.sentby,
       user_messages.visibility,
       GROUP_CONCAT(post_images.image_id SEPARATOR ';') AS `POST_IMG_ID`,
       GROUP_CONCAT(post_images.small_pic_path SEPARATOR ';') AS 'POST_IMG_PATH',
       likes.TCount AS 'TOTAL_LIKES',
       smsusers.fname AS 'SENTBY_FNAME',
       smsusers.lname AS 'SENTBY_LNAME',
       profile_pic.small_pic_path AS 'SENTBY_SMALL_PIC_PATH',
       GROUP_CONCAT(comments.comment) AS `Comments`
FROM user_messages
INNER JOIN smsusers ON user_messages.SENTBY = smsusers.id
INNER JOIN profile_pic ON user_messages.SENTBY = profile_pic.userid
LEFT OUTER JOIN post_images ON user_messages.messageid = post_images.messageid
LEFT JOIN
    (SELECT element_id,
            COUNT(*) AS `TCount`
     FROM likes
     GROUP BY element_id) AS likes ON likes.element_id = user_messages.messageid
LEFT JOIN comments ON comments.comment_on = user_messages.messageid
WHERE user_messages.userid = '1'
GROUP BY user_messages.messageid
ORDER BY user_messages.adddate;

Fiddle Demo