1

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

假设一方面,我们有一个数组($relevance):

$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

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

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

2 回答 2

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";
于 2013-07-22T15:24:29.080 回答
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。我建议您使用另一张桌子。

于 2013-07-22T13:51:09.060 回答