我有以下内容返回特定用户帐户的所有计算机的所有用户....效果很好,但我希望在计算机桌上有一个ORDER BY computers.computer_id ASC LIMIT 0, ?
。
我对加入是相当新的,但是在最后一天左右很快就把它拿起来了,但是在涉及连接时不确定桌子上的特定条件。
这个想法是说帐户中有20台计算机...我将其限制为只有前10个,例如,按照其computer_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);
修改
回应Ollie在下面的回答......我想我在这里做错了,因为虽然它没有产生任何错误,但也没有产生任何结果。
$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);
绑定值很好,并且我的原始语句确认了要返回的数据......所以它与语句本身有关。
问题:
我把它缩小到LIMIT ......如果我手动输入LIMIT 0, 它声明的语句中的。如果我输入LIMIT 0,?我绑定它的值,它返回null。有什么想法吗?
答案 0 :(得分:1)
你需要的诀窍是:
您可以在table
中说出SELECT ... FROM table AS 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)
也就是说,您可以在命名表的任何位置命名物理表或虚拟表(查询的结果集)。
这就是结构化查询语言被称为结构化的原因。