Mysql 无法在语句的表结果集中绑定限制值
我有以下返回所有用户…从所有计算机。。。特定用户帐户的名称。很好,但我想在computers表上按computers.computer\u id ASC LIMIT 0排序, 我对连接相当陌生,但在过去一天左右的时间里,我很快就学会了连接,但不确定涉及连接时表上的具体条件 这个想法是说帐户中有20台计算机。。。我仅将其限制为前10个,例如,按照asc顺序,通过其Mysql 无法在语句的表结果集中绑定限制值,mysql,sql,join,Mysql,Sql,Join,我有以下返回所有用户…从所有计算机。。。特定用户帐户的名称。很好,但我想在computers表上按computers.computer\u id ASC LIMIT 0排序, 我对连接相当陌生,但在过去一天左右的时间里,我很快就学会了连接,但不确定涉及连接时表上的具体条件 这个想法是说帐户中有20台计算机。。。我仅将其限制为前10个,例如,按照asc顺序,通过其计算机id。。。这反过来只会留下加入这10台计算机的用户,然后留下加入该计算机上的帐户 $stmt = $db->prepare(
计算机id
。。。这反过来只会留下加入这10台计算机的用户,然后留下加入该计算机上的帐户
$stmt = $db->prepare("
SELECT users.*
FROM computers
LEFT JOIN users
on users.computer_id = computers.computer_id
LEFT JOIN accounts
on accounts.account_id = computers.account_id
WHERE accounts.account_id = ?
");
$stmt->execute(array($_SESSION['user']['account_id'], **limit value goes here**));
// return array
$array = $stmt->fetchAll(PDO::FETCH_ASSOC);
编辑:
作为对奥利下面回答的回应。。。我猜我在这里做错了什么,因为虽然它不会产生任何错误,但也不会产生任何结果
$stmt = $db->prepare("
SELECT users.*
FROM (
SELECT * FROM computers ORDER BY computer_id ASC LIMIT 0, ?
) as c
LEFT JOIN users
on users.computer_id = c.computer_id
LEFT JOIN accounts
on accounts.account_id = c.account_id
WHERE accounts.account_id = ?
");
$stmt->execute(array($_SESSION['user']['account_id'], $_SESSION['user']['licenses']));
// return array
$array = $stmt->fetchAll(PDO::FETCH_ASSOC);
绑定值很好,有数据要返回,正如我的原始语句所确认的。。。因此,这与声明本身有关
问题:
我已经把范围缩小到极限了。。。如果我手动输入限制0,
无论声明中的内容如何,它都是有效的。如果我输入限制0?当我绑定值时,它返回null。有什么想法吗
你需要的诀窍是: 您可以在
中的任何位置说table
,选择。。。从表t
中,您还可以说
SELECT ...
FROM (
/* some valid query */
) AS t
所以你需要
SELECT ...
FROM (
SELECT * FROM computers ORDER BY computer_id ASC LIMIT 0,?
) AS t
LEFT JOIN (whatever)
也就是说,可以在命名表的任何位置命名物理表或虚拟表(查询的结果集)
这就是结构化查询语言被称为结构化查询语言的原因 谢谢你的回复,但我一定是做错了什么,因为根本没有结果。。。但是没有错误。似乎是(计算机)中的绑定问题。。。如果我在语句中手动输入限制,但不使用绑定,则有效。