如何在mySql上加入2个表?

时间:2016-08-16 08:55:41

标签: php mysql sql

我有两张桌子: publick_feed 用户

我想从 public_feed 中选择所有内容,并从用户中选择三列, id user_id <相同/ strong>在 public_feed 中 并将从 public_feed 返回的行分配给users表中的列(通讯员)

我试试这个:

<?php

$sql = "
SELECT * FROM public_feed
WHERE user_id IN
(SELECT id FROM users) AND 
(SELECT Firstname,Lastname,Avatar FROM users WHERE id IN(SELECT user_id FROM public_feed))  

";

$query  = mysqli_query($dbc_conn,$sql);
if(mysqli_num_rows($query) > 0){
    while($row = mysqli_fetch_assoc($query)){
        //echo rows with correspondent details from the users table
        echo $row['user_id'];
        }
}

<?

请任何帮助将不胜感激。 谢谢。

2 个答案:

答案 0 :(得分:2)

我认为进行连接比使用复杂的子查询更清晰:

SELECT u.Firstname,
       u.Lastname,
       u.Avatar,
       COALESCE(pf.User_id, 'NA'),
       COALESCE(pf.Post, 'NA'),
       COALESCE(pf.Date, 'NA')
FROM users u
LEFT JOIN public_feed pf
    ON u.Id = pf.User_id

我假设每个Feed都会在users表中有一个条目,但我不会反对LEFT JOIN users public_feed。对于没有Feed条目的用户,NA会显示在这些列中,并且该用户只会出现在一个记录中。

答案 1 :(得分:2)

如果public_feed中没有用户,并且您仍想要获取用户数据,则使用左连接的版本

SELECT
  u.*, f.* 
FROM
  public_feed f LEFT JOIN
  users u ON f.user_id = u.id;

因为作者要求解释,这里是:

首先,我们将使用表名别名来缩短查询次数

public_feed f

users u

我们说想要引用带别名的表。当然*意味着我们要选择所有列

SELECT users.*, public_feed.*

等于

SELECT u.*, f.*

当然,你可以使用任何其他字母作为别名

接下来我们说public_feed.user_id必须等于users.id。但是当公共订阅源条目不存在时,只显示具有空值的列。这就是我们使用LEFT JOIN而不是INNER JOIN的原因。通常,JOINS用于从多个相关表中获取相关数据。

ON关键字表示表中的列必须等于满足请求的值