2013-07-22 52 views
1

我想使用數組中的數據來添加一列並在MySql表上建立連接。在MySql中使用數組作爲表JOIN

比方說,一方面,我們有一個數組($相關性):

$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表中選擇數據並將它們與$relevance加在一起,基於它們的product_id以獲得類似的結果:

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

換句話說,我怎麼能做出與左側選擇加入使用來自兩個MySQL數據庫和數組數據,將「中庸」是這樣的:

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

回答

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"; 
+0

對不起,LEFT JOIN – Evgeny

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,則此代碼可能會失敗。我建議你使用另一張桌子。