2009-06-20 57 views
2

我想合并下面的代码。虽然我不确定如何引用SELECT * FROM以列表结尾的任何表。“任何”变量的代码?

 $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表,以指示它是哪种类型的列表(saksfifthavenue,guess,...)。

然后,您可以简单地查询该单个表。

这也将normalize你的架构好一点。

+0

+1从我这里。你应该更好地规范你的表格。 – Timotei 2009-06-20 05:29:17

0

您可以使用通配符SHOW TABLES命令进行查询。在你的情况,你会怎么做:

SHOW TABLES LIKE '%listing' 

这在命令行或PHP工作:

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