mysql从两个表中查询两行
我有这个查询来调用两个表的信息。mysql从两个表中查询两行
DB::get("SELECT friends. * , (SELECT `login` FROM `users` WHERE `users`.`id` = friends.`user_id`) AS `login` FROM `friends` WHERE `id_user`='" . $this->user['id'] . "' ORDER BY `id` DESC LIMIT ")
因此,如果用户是在朋友列表显示用户名,我想获得用户名和头像。阿凡达行是avatar
。 我尝试这个。
DB::get("SELECT friends. * , (SELECT `login`, `*avatar*` FROM `users` WHERE `users`.`id` = friends.`user_id`) AS `login` FROM `friends` WHERE `id_user`='" . $this->user['id'] . "' ORDER BY `id` DESC LIMIT ")
而且给我的错误
SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s)
哪里是错误的?
首先,你应该使用Prepared Statement和第二,你可以不写内嵌视图,其中有两列
SELECT friends. * , (SELECT `login`, `*avatar*` FROM ..
,而不是你应该使用JOIN
,这可能比当前的方法更有效并且更具可读性。
@sagi我同意。我认为,措辞是错误的。 – Ravi
'LEFT JOIN'? ? – Martinovska
@Martinovska这取决于。 'Left Join'将返回左表中的公共和数据。我认为,在你的情况下,你应该使用'INNER JOIN' – Ravi
您需要使用JOIN
,如:
SELECT f.*, u.*
FROM friends f JOIN users u ON f.user_id = u.id
WHERE f.id_user = <your_id>
ORDER BY id DESC LIMIT <your_limit>;
在此可能的[** SQLSTATE \ [21000 \]重复中查看答案:基数违规:1241操作数应包含1列。 SQL查询**](https://stackoverflow.com/questions/38326246/sqlstate21000-cardinality-violation-1241-operand-should-contain-1-columns)解释说,你不能有超过1列返回并使用改为加入。 – Nope
当你选择多个列并尝试分配一个列名称时,它永远不会工作,应该是这样,因为它没有意义,认为它...和MySQL引擎想到它,并已为此添加了一个例外,它会抛出该错误。现在我们该如何克服,因为您可以看到一些建议使用JOIN的解答,所以请尝试使用JOIN,并让我们知道是否存在问题。 –
@AbhikChakraborty帮我看看我的例子。 – Martinovska