我希望有人可以帮助以下...我一方面在MYSQL数据库表中有多个产品名称,另一方面我得到一些信息,如定价(不包括产品名称和其他一些静态信息)来自xml feed。 xml feed提供了一个产品代码,我可以使用该代码匹配数据库中我需要的行,因为数据库包含产品名称以及产品代码,而xml不包含产品名称。
我想要做的是从数据库中获取产品名称和其他一些值,并将它们与xml中的其他信息相关联,这样最终结果就是我显示了产品的名称和前端的其他信息。来自多个xml的多个产品...
如果这是带有单个代码的单个产品,我知道我可以将SELECT语句与where子句一起使用,其中WHERE子句是产品ID,但是因为我有多个具有多个ID的产品而且我不需要从数据库中获取所有内容(但只有前端显示/搜索的那些产品),我有点卡住,不知道该怎么做。
我希望这是有道理的。如果没有,请告诉我。
提前致谢。
答案 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')";