如何在mysql中连接多个表(可以在php中处理)?

时间:2014-01-17 18:36:58

标签: php mysql

有一个博客用户界面,我必须显示发布博客的用户的姓名和图片。在该部分下方,我需要显示在该帖子中标记的人的姓名

表格如下: -

profile_tbl

id      user_id      full_name       pic     

---------- + ------------------ + ----------------- ----- + + -----------------

 1        2031          xyz       img1.jpg
 2        4582          abc       img2.jpg
 3        104           user1     img.jpg
 4        3309          user2     aa.jpg

blog_tbl

id      creator_id      post_id       message      create_date

---------- + ------------------ + ----------------- ----- + ----------------- + -------------------------- --------------- +

 1        2031          21       my first post     2014-01-14 19:30:17
 2        4582          22       this is a test    2014-01-14 18:20:03

tagged_users

id      creator_id      post_id       tagged_user_id     

---------- + ------------------ + ----------------- ----- + + -----------------------------------

 1        2031            21             4582
 2        2031            21             104
 3        2031            21             3309

如何通过单个查询获取此信息? 要求:- 1.发布此博客的用户的名称 2.发布此博客的用户的图片
3.使用此帖子中标记的用户姓名和身份

2 个答案:

答案 0 :(得分:0)

blog_tbl需要包含user_id(current user id)列,以便您可以指定作者,tagged_users也需要包含user_id(current user id),以便您知道是谁标记了此人。

答案 1 :(得分:0)

使用单个查询实现数据的一种方法是

select `p1`.`first_nm`,`p1`.`prf_pic`,
`b1`.`crt_date`,`b1`.`desc`,
group_concat( distinct(`p2`.`first_nm`)) as `tagged_names`,
group_concat( distinct(`p2`.`my_id`)) as `user_ids`
from `my_profile` `p1`
Inner join `conversation` `b1` on `b1`.`creator` = `p1`.`my_id`
Left JOIN `notification` `t1` on `t1`.`creator` = `p1`.`my_id` 
Left join `my_profile` `p2` on `p2`.`my_id` != `p1`.`my_id` 
AND `t1`.`creator` = `p1`.`my_id` AND `t1`.`to_id` = `p2`.`my_id`
group by `p1`.`my_id`

此查询将列出所有带逗号分隔的标记用户名和带逗号分隔的相应用户ID。因此,您可以根据需要操作结果

以下是我创建的示例

http://www.sqlfiddle.com/#!2/72da55/14