做了一个SNS的小网站,想问一下,如何用最高效的方法获取多个数据库的数据。比如
album
album_id  user_id  user_name  user_ico  album_name  album_describe  album_cover  photo_num  add_time update_time  blog
blog_id  user_id  user_name  user_ico  blog_title  blog_content  add_time  update_time  blog_comment
blog_comment_id  blog_id  user_id  user_name  comment_content  update_time  
这三个表,如何用一句sql语句获得所有数据,用以在新鲜事和个人首页中显示出来。还有,怎样统计blog和album的总数量啊。谢谢各位高手

解决方案 »

  1.   

    听说3条sql语句比一条的高效些
      

  2.   

    SELECT a .* , b .*. c.* FROM  album AS a, blog AS b, blog_comment AS c WHERE a.album_id = b.blog_id那就这样查询吧,把*和where条件换成你想要的就行了  
    统计总量直接用count  结合  group by  就行了
      

  3.   

    你那个方法试过,不成。而且我要根据特定的user_id来提取数据。
    我曾经写过一个"SELECT album_id,blog_id FROM aged_album AS a,aged_blog AS b WHERE (a.user_id = '$user_id') OR(b.user_id = '$user_id')",但老是提示WHERE CALUSE
      

  4.   

    你的sql语句album_id,blog_id  没有指定是那个表的   应该是  a.album_id这种的吧
      

  5.   

    考虑到后期用户比较多的时候联合查询会导致锁表。分开查比较好
    如果可以的话,在用户表中增加是否开通了blog,上传了相片,发表的评论、日志等字段。
      

  6.   

    可是,像新鲜事这种页面,他需要根据更新时间来统一排序。如果分开查,那么blog,album应该分别取多少数据。而且,也许blogA的更新时间在album后,但是却放在了album前
      

  7.   

    本人是小白,不太明白。请帮着写一条具体的查询语句。比如根据这blog,album两个表查询它们对应的所有评论
      

  8.   

    大致如此,自己修改一下满足你的需求,
    性能你实际测试一下select * 
    from 
    (
     
    (
    select album_id as item_id, 
     user_name as username, 
     update_time as updatetime, 
     'album' as type
    from album
    order by updatetime 
    limit 10

    union
    (
    select blog_id as item_id, 
      user_name as username, 
      update_time as updatetime, 
      'blog' as type'
    from blog
    order by updatetime 
    limit 10
    )
    union
    (
    select blog_comment_id as item_id, 
      user_name as username, 
      update_time as updatetime, 
      'comment' as type
    from blog_comment
    order by updatetime 
    limit 10
    )) tmp
    order by updatetime desc
    limit 10
    ;
      

  9.   


    这个用union和你独立3次查询实际是一样的,不会对效率有太大影响
    只是一个在mysql里完成合并和合并后排序的过程,一个在php里完成,
      

  10.   

    select * from a,b,and c?
      

  11.   


    是的,另外你自己写的 "SELECT album_id,blog_id FROM aged_album AS a,aged_blog AS b WHERE (a.user_id = '$user_id') OR(b.user_id = '$user_id')",
    是有误的,a表和b表都没有关联起来呢。from两个表,但这两个表没有关联哦。
      

  12.   

    不建议用UNION,特别是在数据量非常大的情况下,关联三张表进行查询会有严重的性能问题,可以考虑使用三次单独查询再合并结果集的办法,在加了索引的情况下性能会更好些
      

  13.   

    多表联查SELECT
    A.user_id,
    A.album_name,
    B.blog_title,
    C.comment_content
    FROM
    A 表 A
    ON
    LEFT JOIN B表 B ON B.ID = A.ID
    LEFT JOIN C表 C ON C。ID = A.ID有条件的再加行:
    WHERE ..........
    排序(如A表的ID由大到小排):
    ORDER BY A.ID DESC