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を識別する1つのテーブルの列です。

適切なクライアント識別列を使用すると、次のようにクエリを実行できます。

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 に答える