无法绑定语句的表结果集中的LIMIT值

时间:2014-05-08 01:01:16

标签: mysql sql join

我有以下内容返回特定用户帐户的所有计算机的所有用户....效果很好,但我希望在计算机桌上有一个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。有什么想法吗?

1 个答案:

答案 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)

也就是说,您可以在命名表的任何位置命名物理表或虚拟表(查询的结果集)。

这就是结构化查询语言被称为结构化的原因。