2011-03-29 102 views
0

首先,我想首先爲可能未命名的標題道歉......我很難描述我在這裏要做的事情。使用多行的MySQL查詢搜索

隨着我正在開發的當前項目,我們已經設置了一個「動態」的數據庫結構,看起來像這樣。

item_details(描述了item_data

fieldID | fieldValue | fieldCaption 

    1 |  addr1 | Address Line 1 

    2 |  country | Country 

item_data

itemID | fieldID | fieldValue 

12345 |  1  | Some Random Address 

12345 |  2  | United Kingdom 

因此,大家可以看到,例如,如果我想查找的地址爲項目12345我會只是做這個聲明。

SELECT fieldValue FROM item_data WHERE fieldID=1 and itemID=12345;

但這裏是我在哪裏卡住了...該數據庫與周圍〜80K行比較大,我想創建PHP內一組搜索功能。

我希望能夠儘快完成對結果集查詢的查詢......

例如,搜索地址名稱某一個國家內...即:搜索與同ITEMID的作爲結果從查詢結果的fieldValue

'SELECT itemID from item_data WHERE fieldID=2 and fieldValue='United Kingdom'..

對不起,如果我不清楚,我一直在努力與這個過去幾天...

乾杯

回答

1

您可以通過幾種方法來做到這一點。一種是對item_data表使用多個連接,並將fieldID限制爲任何你想獲得的值。

SELECT * 
FROM 
Item i 
INNER JOIN item_data country 
ON i.itemID = country.itemID 
    and fieldid = 2 
INNER JOIN item_data address 
ON i.itemID = country.itemID 
    and fieldid = 1 
WHERE 
    country.fieldValue= 'United Kingdom' 
    and address.fieldValue= 'Whatever' 

順便這種結構通常被稱爲Entry Attribute Value or EAV數據庫

+0

啊哈就是我需要的!有沒有辦法只選擇INNER JOIN上的特定字段?非常感謝..乾杯! – Eddie 2011-03-29 19:38:48

+0

@Eddie如果你願意,你可以使用[內嵌視圖](http://www.orafaq.com/wiki/Inline_view)。這可能會對你的表演有正面或負面的影響,所以一定要測試 – 2011-03-29 20:28:19

+0

我會給它一個鏡頭,但根據以前的經驗,它不會幫助優化...乾杯 – Eddie 2011-03-29 20:39:38

0

對不起提前如果這聽起來光顧,但(如你所說)我不太清楚你問什麼。

如果你正在尋找一個查詢來完成整個事情,你可以簡單地嵌套它們。舉個例子,假設有一個名爲CACHED的表,其中包含英國查詢的結果,然後寫出您想要的查詢,但用您的英國查詢替換CACHED。

如果您的想法是您已經完成了這個英國查詢並希望(重新)使用其結果,那麼您可以將結果保存到DB中的表格中(如果有大量數據可能不太實際)或將ID列表保存爲文本並將其粘貼到後續查詢中(...(...)中的WHERE ID),如果您的「緩存」查詢爲您提供了一個原始表格的可管理部分。