簡體   English   中英

使用數組作為MySql JOIN中的表

[英]Use array as table in MySql JOIN

我想使用數組中的數據來添加列並在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表中選擇數據,並根據它們的product_id它們與$relevance起來,以獲得類似以下內容:

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

換句話說,如何使用來自MySql數據庫和一個數組的數據進行LEFT JOIN SELECT,該數組將“表示”如下所示:

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

純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";

好了,您可以使另一個表相關,然后就可以使用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。 我建議您使用另一個表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM