我想整合以下代码。虽然我不确定如何引用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您的架构更好一些。
答案 1 :(得分:0)
据我所知,您无法在表名中指定通配符。所以你的代码可能就像它会得到的一样小。
如果您不需要实时访问,可以定期将结果写入另一个表,并仅引用该表。
答案 2 :(得分: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>";