2

我有一堆类似于 Client# 和 # 更改的表。有没有办法创建一个查询来根据您从登录时获得的客户编号查询该表?

给出想法的例子:

      $q2 = "SELECT * FROM users WHERE username = '".$_SESSION['username']."'";
        $result2 = mysql_query($q2,$conn);
        $row = mysql_fetch_assoc($result2);
        $_CLIENT_ID = $row['CLIENTID'];
        $q2 = "SELECT * FROM client+".$_CLIENT_ID."";

有一个更好的方法吗?

我试图让客户留在他们自己的桌子上,这样他们就不会变得庞大。

4

1 回答 1

3

我试图让客户留在他们自己的桌子上,这样他们就不会变得庞大。

这几乎总是错误的策略。表的大小并不像您如何为访问建立索引那么重要,如果有必要,以后可以对其进行分区。处理此问题的正确方法只是在一个表中标识客户 ID 的列。

使用适当的客户端识别列,您可以查询为:

SELECT othertable.* 
FROM
  users 
  JOIN othertable ON users.CLIENTID = othertable.CLIENTID
WHERE users.username = '$_SESSION['username']'

处理动态表名变得很麻烦,不仅因为它更难查询。例如,您不能在 PDO 和 MySQLi 等许多参数化查询 API 中使用占位符代替表名:

// Won't work with a PDO prepared statement.  :clienttable place holder isn't allowed
SELECT * FROM :clienttable WHERE value=:someval
于 2012-04-07T19:15:47.723 回答