“任何”变量的代码?

时间:2009-06-20 05:09:56

标签: php mysql

我想整合以下代码。虽然我不确定如何引用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

3 个答案:

答案 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>";