内部加入Mysql

时间:2018-03-22 02:46:17

标签: php mysql inner-join

无法让这个内部联接起作用,我知道我做错了,但无法弄清楚如何做到这一点。

我正在尝试从user_meta表中选择每一列,并将name表中的users列添加到结果数组中。我正在使用密钥username,它在两个表上作为密钥进行级联。

然后我试图将它作为对象返回给调用函数。

这就是我所拥有的:

$sql = 'SELECT * FROM user_meta
        INNER JOIN name as name FROM users 
        WHERE username = :username';

$db = static::getDB();
$stmt = $db->prepare($sql);
$stmt->bindParam(':username', $username, PDO::PARAM_STR);

$stmt->setFetchMode(PDO::FETCH_CLASS, get_called_class());

$stmt->execute();

return $stmt->fetch();

但是我得到的是1064,所以我的语法显然是错误的。

*编辑*

我取得了一些进展,但这并不理想。基本上我现在通过使用LEFT JOIN返回两个表中的所有内容。但我只想从name表中左键加入users列。

$sql = 'SELECT * FROM user_meta
        LEFT JOIN users
        ON user_meta.username = users.username';

2 个答案:

答案 0 :(得分:0)

tb1tb2代表2表,就像保存变量一样。

SELECT tb1.*, tb2.name  
FROM user_meta tb1
INNER JOIN users tb2
ON tb1.username = tb2.username
WHERE tb1.username = :username

tb1调用meta_users中的每一列,而tb2只调用user中的名称。

答案 1 :(得分:0)

终于解决了!

LEFT JOIN是当天的顺序,而不是INNER JOIN。

如果有其他人被类似的东西困扰:

首先从user_meta表user_meta.*中选择所有内容,然后从users表users.name中选择名称列。

ON方法是在两个单独的表之间添加比较键的地方,在我的情况下,每个表username中的两个列都被称为相同的事物。

$sql = 'SELECT user_meta.*, users.name
        FROM user_meta
        LEFT JOIN users
        ON user_meta.username = users.username
        WHERE user_meta.username = :username';