选择包含动态内容的MySQL表

时间:2012-04-07 19:13:12

标签: php mysql

我有一堆像Client#和#changes这样的表。有没有办法根据您登录时使用的客户端编号创建查询以查询该表?

提出想法的例子:

      $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."";

有更好的方法吗?

我正在努力让客户留在他们自己的桌子里,这样他们就不会变得庞大。

1 个答案:

答案 0 :(得分:3)

  

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

这几乎总是错误的策略。表格大小与您为访问编制索引的方式一样重要,如果有必要,它可以在partitioned之后。处理此问题的正确方法只是一个表中的一列,用于标识客户端ID。

使用正确的客户识别列,您可以查询:

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

处理动态表名称变得很麻烦,不仅因为查询起来比较困难。例如,您不能使用占位符代替具有许多参数化查询API的表名,例如PDO&库MySQLi:

// Won't work with a PDO prepared statement.  :clienttable place holder isn't allowed
SELECT * FROM :clienttable WHERE value=:someval