2014-09-21 67 views
0

Mysql的計算總內存有該表:基於前綴

CREATE TABLE IF NOT EXISTS `assets` (
    `asset_id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `asset_memory` varchar(255) NOT NULL, 
    `asset_memory_prefix` tinyint(1) NOT NULL DEFAULT '2', 
    PRIMARY KEY (`asset_id`), 
    KEY `Locations` (`position_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; 

我需要計算的基礎上 asset_memory和asset_memory_prefix其中asset_memory_prefix是這樣定義的特定ASSET_ID的內存總和:

$_prefix = array(
    array("id" => 0, "prefix" => "B", "prefix_name" => "byte", "pow_value" => "0"), 
    array("id" => 1, "prefix" => "Kb", "prefix_name" => "Kilobyte", "pow_value" => "1"), 
    array("id" => 2, "prefix" => "Mb", "prefix_name" => "Megabyte", "pow_value" => "2"), 
    array("id" => 3, "prefix" => "Gb", "prefix_name" => "Gigabyte", "pow_value" => "3"), 
    array("id" => 4, "prefix" => "Tb", "prefix_name" => "Terabyte", "pow_value" => "4"), 
    array("id" => 5, "prefix" => "Pb", "prefix_name" => "Petabyte", "pow_value" => "5"), 
    array("id" => 6, "prefix" => "Eb", "prefix_name" => "Exabyte", "pow_value" => "6"), 
    array("id" => 7, "prefix" => "Zb", "prefix_name" => "Zettabyte", "pow_value" => "7") 
    ); 

所以條目可能是這樣的:

asset_id, asset_memory, asset_memory_prefix 
    1, 1024, 2 
    2, 1024, 3 
    3, 2048, 2 

如何在SELECT中這樣做?

回答

0

你只想要一個group by

select asset_id, sum(asset_memory) as asset_memory, asset_memory_prefix 
from assets 
group by asset_id, asset_memory_prefix; 

編輯:

我想這是你想要的,假設asset_memory_prefix是一個表:

select a.asset_id, 
     sum(pow(1000, ap.pow_value) * asset_memory) as total_memory_bytes 
from assets a join 
    asset_prefix ap 
    on a.asset_memory_prefix = ap.asset_memory_prefix 
group by a.asset_id; 

我不知道,如果你想1000即1024個(2^10 )。

你應該能夠在asset_memory_prefix直接使用:

select a.asset_id, 
     sum(pow(1024, ap.asset_memory_prefix) * 
      asset_memory 
     ) as total_memory_bytes 
from assets a join 
    asset_prefix ap 
    on a.asset_memory_prefix = ap.asset_memory_prefix 
group by a.asset_id; 
+0

最後一個例子是我需要的。我已經將它設置爲1024.但它只是PHP中的一個數組(前綴是),而不是表中的數組 – osomanden 2014-09-21 15:49:23