如何根据不同的外部值显示mysql表中的行

时间:2016-01-01 00:47:53

标签: php mysql

我希望有人可以帮助以下...我一方面在MYSQL数据库表中有多个产品名称,另一方面我得到一些信息,如定价(不包括产品名称和其他一些静态信息)来自xml feed。 xml feed提供了一个产品代码,我可以使用该代码匹配数据库中我需要的行,因为数据库包含产品名称以及产品代码,而xml不包含产品名称。

我想要做的是从数据库中获取产品名称和其他一些值,并将它们与xml中的其他信息相关联,这样最终结果就是我显示了产品的名称和前端的其他信息。来自多个xml的多个产品...

如果这是带有单个代码的单个产品,我知道我可以将SELECT语句与where子句一起使用,其中WHERE子句是产品ID,但是因为我有多个具有多个ID的产品而且我不需要从数据库中获取所有内容(但只有前端显示/搜索的那些产品),我有点卡住,不知道该怎么做。

我希望这是有道理的。如果没有,请告诉我。

提前致谢。

2 个答案:

答案 0 :(得分:2)

您可能会使用IN查询从表中获取产品。然后,您必须将它们合并到通过XML获得的行的对象或数组中。

select * from `mydb`.`myproducts` where product_id in ('key1', 'key2', 'key3');

根据您对不同答案的评论,如果您希望构建产品代码数组,那么这是最可行的方法:

$productIds = array();
foreach ($myXmlRecords as $xmlProduct) {
    array_push($productIds, $xmlProduct->product_id);
}

$query = 'select * from `mydb`.`myproducts` where product_id in (\'' . implode("', '", $productIds) . '\')';

更进一步,如果你想加入两者的数据,那么我就做以下事情:

$products = array();
$productIds = array();
foreach ($myXmlRecords as $xmlProduct) {
    $p = new stdClass();
    $p->product_id = $xmlProduct->product_id;
    $p->xmlProp1 = $xmlProduct->prop1;
    $p->xmlProp2 = $xmlProduct->prop2; // basically transfer any Xml properties you want to retain to the new $p object
    array_push($products, $p);
    array_push($productIds, $xmlProduct->product_id);
}
// Now build your query that will grab all matching products you got from Xml
$query = 'select * from `mydb`.`myproducts` where product_id in (\'' . implode("', '", $productIds) . '\')';
// Now match up the results
$results = mysql_query($query);
foreach ($results as $prodRow) {
    foreach ($products as $p) {
        if ($p->product_id == $prodRow->product_id) {
            // These match, now add your db properties to the product
            $p->dbProp1 = $prodRow->prop1;
            $p->dbProp2 = $prodRow->prop2; // and so on
        }
    }
}

最终结果是一系列产品,其中包含您要组合的Xml和Db信息。在某人纠正我之前,可能有一种比嵌套的foreach语句更有效的方法,例如更新mysql查询以对Xml数据使用连接,然后从该数据库和数据库中进行选择。但这是一种快速的方法,可以让你到达你需要的地方。

希望有所帮助!

答案 1 :(得分:2)

当您处理XML Feed时,请将所有产品代码放入数组中。然后,您可以通过以下方式动态构造SQL查询:

$codes_string = implode(', ', $product_codes);
$sql = "SELECT * FROM product_table WHERE product_id IN ($codes_string)";

我假设产品ID是数字ID。如果他们串起来,则需要在每个字符串周围加上引号:

$codes_string = implode("', '", $product_codes);
$sql = "SELECT * FROM product_table WHERE product_id IN ('$codes_string')";