2010-11-22 78 views
1

你好,我在delima
假設我有50個產品類別,我希望得到我的產品的所有功能...
Ofcourse SQL聯接不會幫助,因爲加入將返回產品信息很多次!SQL查詢或php代碼?

因此,這裏的問題..什麼是更好的
計劃中的
獲取與一個SQL查詢類別中的所有產品的功能,然後用PHP的每個特徵迭代,並把它的產品。

B計劃
對於每個產品通過調用查詢

接受其他解決方案中得到的特徵!

編輯

我的表架構輪廓..
其中有產品信息(每行)
具有特徵(特徵ID)的表功能
一種功能價值
表的一個表格產品 這與他們的功能產品和值

+3

您應該在您的架構上發佈更多內容。你的桌子是如何組織的? – 2010-11-22 04:08:56

+0

是的,請用您的模式更新您的問題。一個連接可能實際上是有用的,這取決於數據的組織方式,以及你想要從數據中獲得什麼。 – 2010-11-22 04:18:42

回答

2
$sql1 = "SELECT * FROM products P, ". //don't use star, make sure no fields are overwritten 
     INNER JOIN products_to_features PTF on P.id = PTF.project_id 
     INNER JOIN features F F.id = PTF.feature_id 
     ORDER BY P.id"; 
$r = mysql_query($sql1, $conn); 

$arr = array(); 
$lastProductId = -1; 
while ($row = mysql_fetch_assoc($r)) 
{ 
    if ($row[p_id] != $lastProductId) 
    { 
     $lastProductId = $row['p_id']; 
     $arr['p_id'] = array('productName' => $row['p_name'], 
          'productPrice' = $row['p_price'], 
          'productFeatures' = array(), 
          //other fields from product table); 
    } 
    $arr['p_id']['productFeatures']['f_id'] = array('featureName' => $row['f_name'], blah...); 
} 

我不明白你的領域,你可能想加入feature_values,這樣會有更多的工作。你可以做不同的鍵/值(例如 - 產品名稱作爲關鍵字,特徵名稱作爲鍵值,無論你想要什麼值都是特性值),但重點是在一個查詢中這是可行的(並推薦)。

+0

謝謝你的時間..有一個額外的表功能VALUES ..你會告訴我,如果我必須做一個單獨的查詢?再次感謝 – GorillaApe 2010-11-22 05:23:43

+0

不,你仍然不需要再多加一次我不確定你的桌子是什麼樣的,但是我得到的印象是你的產品到功能到功能價值表是不必要的(如果那樣的話這是什麼)。產品和特徵值之間應該有多對多的關係。特徵值是特徵類型的一個實例。 (即 - 特徵'風味'特徵值'草莓')。一旦查詢完成,只需以類似的方式將新值添加到#arr。你可能希望每個功能都是其各自價值的關鍵 – 2010-11-22 12:28:43

+0

只是修復了一些錯別字,並且在feature_values – 2011-05-10 23:27:23

2

沒有計劃B.

不管你做到這一點可以而且應該b A表用一個或最多兩個總查詢完成(一個用於標題,一個用於正確排序的特性列表+ id列)。無論該查詢是計劃A還是某些未提及的計劃C,都取決於您的確切表結構,而您的問題並不清楚。

0

一般來說,你必須做的數據庫查詢越少越好。這很大程度上取決於你的表格結構,但我會用Plan A.

+0

但我運行測試和計劃B更快,不知道爲什麼... – GorillaApe 2010-11-22 16:52:36

0

循環內的查詢將大大降低應用程序的性能。不惜一切代價避免它。

向我們展示架構。單個SQL查詢很有可能解決您的問題。