2012-04-07 9 views
2

私はクライアント#と#変更のようなテーブルの束を持っています。あなたが使用するときにログインしたクライアント番号に基づいてテーブルをクエリするクエリを作成する方法はありますか?動的コンテンツを含むMySQLテーブルを選択してください

例のアイデアを与えるために:

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

はこれを行うには良い方法はありますか?

私は自分のテーブルにクライアントを置いて、大規模にならないようにしています。

答えて

3

私は自分のテーブルにクライアントを置いて大規模にならないようにしています。

これはほとんどの場合、間違った戦略です。テーブルのサイズは、アクセスのために索引付けした方法ほど重要ではありません。後で必要になる場合は、partitionedにすることができます。これを処理する適切な方法は、単にクライアントIDを識別する1つのテーブルの列です。あなたのように問い合わせることができ、適切なクライアント識別列で

:に対してクエリすることがより困難であるため

動的テーブル名の対処
SELECT othertable.* 
FROM 
    users 
    JOIN othertable ON users.CLIENTID = othertable.CLIENTID 
WHERE users.username = '$_SESSION['username']' 

だけでなく、問題となります。たとえば、PDO &などの多くのパラメータ化されたクエリAPIを持つテーブル名の代わりにプレースホルダを使用することはできません。MySQLi:

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