无法让这个内部联接起作用,我知道我做错了,但无法弄清楚如何做到这一点。
我正在尝试从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';
答案 0 :(得分:0)
tb1
和tb2
代表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';