2009-06-20 14 views
2

次のコードを統合したいと思います。私はリストから終わるすべてのテーブルからSELECT *を参照する方法がわかりませんが。事前に'任意の'変数のコード?

 $this->displaylistings=mysql_query("SELECT * FROM nordstromlisting WHERE ShopperID = '$this->ShopperID' 
    UNION ALL SELECT * FROM saksfifthavenuelisting WHERE ShopperID = '$this->ShopperID' 
    UNION ALL SELECT * FROM guesslisting WHERE ShopperID = '$this->ShopperID' 
    UNION ALL SELECT * FROM gnclisting WHERE ShopperID = '$this->ShopperID' 
    UNION ALL SELECT * FROM urbanoutfitterslisting WHERE ShopperID = '$tnis->ShopperID' 
    UNION ALL SELECT * FROM bananarepubliclisting WHERE ShopperID = '$this->ShopperID' 
    UNION ALL SELECT * FROM americaneaglelisting WHERE ShopperID = '$this->ShopperID' 
    UNION ALL SELECT * FROM neimanmarcuslisting WHERE ShopperID = '$this->ShopperID' 
    UNION ALL SELECT * FROM footlockerlisting WHERE ShopperID = '$this->ShopperID'"); 

ありがとう:D

答えて

0

あなたは私の知る限り、テーブル名にワイルドカードを指定することはできません。だから、コードはおそらくそれが得られるほど小さいでしょう。

リアルタイムアクセスが必要ない場合は、結果を別のテーブルに定期的に書き込み、そのテーブルのみを参照することができます。

6

私の知るところでは、ワイルドカード付きの表を参照する方法はありません。

スキーマを変更して、listingテーブルが1つあり、どのタイプのリスト(saksfifthavenue、guess、...)が表示されているかを確認することをお勧めします。

これで、単一のテーブルに対して簡単にクエリを実行できます。

これはまた、normalizeあなたのスキーマが少し良くなります。

+0

+1を私から。あなたはテーブルを正常化するべきです。 – Timotei

0

SHOW TABLESコマンドでワイルドカードでクエリできます。あなたのケースでは、あなたはどうなる:コマンドラインやPHPで動作

SHOW TABLES LIKE '%listing' 

$find_tables_query = "SHOW TABLES LIKE '%listing'"; 
$result = mysql_query($find_tables_query) 
    or die ("Cannot make query. " . mysql_error()); 

$queries = array(); 
while ($row = mysql_fetch_row($result)) { 
    $queries[] = 'SELECT * FROM ' 
     . $row[0] 
     . ' WHERE ShopperID=\'$this->ShopperID\''; 
} 
$combined_query = implode("\nUNION ALL\n",$queries); 

// for debugging, print query: 
print "<pre>"; 
print $combined_query; 
print "</pre>";