在MySql JOIN中使用数组作为表

时间:2013-07-22 13:32:33

标签: php mysql left-join

我想使用数组中的数据添加列并在MySql表上进行连接。

让我们说,一方面,我们有一个数组($相关性):

$relevance = array(
  array('product_id' => 1, 'relevance' => 2),
  array('product_id' => 2, 'relevance' => 5),
  array('product_id' => 3, 'relevance' => 1),
);

另一方面,我们有这个表(产品):

product_id  | product_name
--------------------------
1           | Product 1
2           | Product 2
3           | Product 3

现在,我想从products表中选择数据,然后根据$relevanceproduct_id加入product_id | product_name | relevance --------------------------------------- 1 | Product 1 | 2 2 | Product 2 | 5 3 | Product 3 | 1 ,以获得类似的内容:

SELECT `p`.*, `{{$relevance}}`.* FROM `products` AS `p`
LEFT JOIN `{{$relevance}}`
ON p.product_id = {{$relevance}}.product_id

换句话说,如何使用来自MySql数据库和数组的数据使用LEFT JOIN进行SELECT,这意味着“意味着”这样的事情:

{{1}}

2 个答案:

答案 0 :(得分:2)

纯sql解决方案,但对于大型记录集来说效率不高:

$relevances = array()

foreach ($relevance as $v){
    $relevances[] = "SELECT {$v['product_id']} as product_id, {$v['relevance']} as relevance"
}

$sql = implode(' UNION ', $relevances);

$sql = "SELECT p.product_id, p.product_name, r.relevance 
FROM products p 
JOIN ($sql) r ON p.product_id=r.product_id";

答案 1 :(得分:0)

好吧,您可以创建另一个表相关性,然后您可以使用JOIN。或者您可以使用循环来获取这些数据。像

这样的东西
$relevance = array(
    array(1, 'relevance' => 2),
    array(2, 'relevance' => 5),
    array(3, 'relevance' => 1),
);

$q = mysql_query("SELECT * FROM products")
while($r = mysql_fetch_assoc($q))
{
   $productRelevance = $relevance[$r['prod_id']-1];
}

如果您删除某些产品并且这些ID不符合规定,则此代码可能会失败,例如:1,2,5,6,7,10。我建议你使用另一张桌子。