2011-09-26 15 views
2

好的,我已經閱讀了所有類似的線程,但仍然無法自己弄清楚。Mysql查詢得到所選行左右的行

我的問題: 我試圖做一個相對性能表中的股票(價格指數)。 我需要在這裏使用我的數據庫中的這兩個表。

1表:

股票名稱

我查詢該表以獲得數據庫中所有股票的名稱。

例如:

Array 
(
    [0] => LT0000102337 
    [1] => EE3100034653 
    [2] => EE3100003609 
    [3] => EE3800046643 
    [4] => LT0000127375 
    [5] => LV0000100659 
    [6] => LV0000100501 
) 

第二個表:

其所有的存儲爲我的股票

指數值(例如EV或EBITDA或P/E)對於以i和股票編號(即iLT0000102337或iEE3100034653)開頭的不同表格中的每隻股票。

結構爲:

id | ev | ebitda | pe 
23 | 12 | 141322 | 15 

可以說我有股票數的股票,我需要獲得最後的ID和它的指數(例如EV = 12)。

現在我需要從其他股票指數表中得到四行,ev最接近12,其他4 ev多於12。最大的id表示最新的值,我只需要那些。 所以,即一隻股票最大的id與10,另一個有11,另一個有15等,所以我需要讓那些lister爲10,10.1,10.5,11.5,,14,15,18,22。

我有非常複雜的表格結構,我想這是什麼讓這個很難。

爲了得到它在一張表中我使用聯盟,但現在我卡在排名那些。

foreach($instrumentsm as $instrumentm) { 
    $sqlxm .= "(SELECT id, ev, '$instrumentm' as name FROM i".$instrumentm." ORDER BY id DESC LIMIT 1)"; 
    if ($i<count($instrumentsm)-1){ 
     $sqlxm .= " UNION "; 
     $i++; 
    } 
} 
$sqlxm .= " ORDER BY ev DESC"; 

這造成了我這樣的查詢:

 (SELECT id, ev, 'LT0000102337' as name 
     FROM iLT0000102337 
     ORDER BY id DESC LIMIT 1) 
UNION (SELECT id, ev, 'EE3100034653' as name 
     FROM iEE3100034653 
     ORDER BY id DESC LIMIT 1) 
UNION (SELECT id, ev, 'EE3100003609' as name 
     FROM iEE3100003609 
     ORDER BY id DESC LIMIT 1) 
UNION (SELECT id, ev, 'EE3800046643' as name 
     FROM iEE3800046643 
     ORDER BY id DESC LIMIT 1) 
UNION (SELECT id, ev, 'LT0000127375' as name 
     FROM iLT0000127375 
     ORDER BY id DESC LIMIT 1) 
UNION (SELECT id, ev, 'LV0000100659' as name 
     FROM iLV0000100659 
     ORDER BY id DESC LIMIT 1) 
UNION (SELECT id, ev, 'LV0000100501' as name 
     FROM iLV0000100501 
     ORDER BY id DESC LIMIT 1) 
ORDER BY ev DESC 

現在,我使用我這樣做,以及如何做到這一點的相對性能比較最好的算法中? 謝謝!

+1

bumpbumpbumpbumpbump – Josh

+0

您可以談論字段和表格,我們幾乎看不到任何內容,其中以我所顯示的值iLT0000102337開頭。請努力將其歸結爲一個明確的問題,以便我們能夠提供幫助。 – Melsi

+0

你有2個表:索引和股票,你怎麼知道索引表中的一行與股票有關?你是否每股創建一張表?它是可修改的還是你真的需要它? –

回答

0

我最大的建議是更好地規範化數據。 (我不知道股票的第一件事,所以如果我誤解了某些東西,請原諒我。)

首先,不要在一張表中使用單個列來存放一個由多個另一個表中的列。相反,每個表中都有一個id列。 (你可以忽略列,直到你需要它,遲早你會最終需要它。)

然後,對於「子」表中的每個條目,都存儲在「父」的表中找到的「父」的標識。

表1(股票名稱),可能有以下欄目:

ID,名,特信息

表2(指數值)將包含一個列,以保存鏈接回外鍵股票名稱:

ID,stock_name_id,STOCK_ID,stock_ebitda,stock_ev,stock_pa

在stock_name_id場,你把對應於名ID屬於。

順便提一句,這些id列應該都是自動編號的主鍵。