これが私が現在行っていることの簡略版です。
A)
SELECT id, foreign_key_id, type, quantity, MAX(price) AS price // <--- Max
FROM quotes
WHERE type = 'tier 1' // <--- Equal
AND prod_id_requested = 12345
B)
SELECT id, foreign_key_id, type, quantity, MAX(price) AS price // <--- Max
FROM quotes
WHERE type != 'tier 1' // <--- NOT equal
AND prod_id_requested = 12345
C)
SELECT id, foreign_key_id, type, quantity, MIN(price) AS price // <--- Min
FROM quotes
WHERE type = 'tier 1' // <--- Equal
AND prod_id_requested = 12345
D)
SELECT id, foreign_key_id, type, quantity, MIN(price) AS price // <--- Min
FROM quotes
WHERE type != 'tier 1' // <--- NOT equal
AND prod_id_requested = 12345
いくつかのリソースを節約し、これらを組み合わせてより少ないクエリにするための良い方法はありますか?
それとも、これはほとんどそれを行う方法ですか?
[更新]
次のサンプルデータを試してみてください。
CREATE TABLE IF NOT EXISTS `quote_item` (
`id` int(2) unsigned NOT NULL AUTO_INCREMENT,
`quote_id` int(2) unsigned NOT NULL,
`product_id_quoted` int(3) unsigned NOT NULL,
`product_id_requested` int(3) unsigned NOT NULL,
`type` varchar(52) DEFAULT NULL,
`price` float(10,4) NOT NULL,
`quantity` int(9) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
INSERT INTO `quote_item` (`id`, `quote_id`, `product_id_quoted`, `product_id_requested`, `type`, `price`, `quantity`) VALUES
(1, 1, 12, 12, 'tier 1', 0.0100, 100),
(2, 2, 1, 12, 'tier 3', 0.0038, 8200),
(3, 2, 13, 12, 'tier 2', 0.0041, 10000),
(4, 3, 7, 14, 'tier 1', 0.0060, 25000),
(5, 3, 8, 12, NULL, 0.0180, 250),
(6, 3, 9, 15, NULL, 0.0019, 5000),
(7, 4, 12, 12, NULL, 0.0088, 7500),
(8, 4, 16, 12, 'tier 1', 0.0040, 10000),
(9, 5, 12, 9, 'tier 2', 0.0089, 1200),
(10, 5, 12, 12, 'tier 1', 0.0072, 6400);
最終的には、すべてのデータを配列にうまくパックしたいと考えています。
現在、各クエリ(GROUPingなし)から行を取得しています。ここでは、最小値を持つ単一行の実際のID、数量など、および最大価格を持つ単一行の同じ情報があります。 、「タイプ」カテゴリごとに、アレイを構築します。
例えば:
$flash_report = array(
'tier1' => array(
'qty' => array(
'min' => array(
'id' => 1
,'quote_id' => 1
,'price' => 0.01
,'quantity' => 100
)
,'max' => array(
'id' => 8
,'quote_id' => 4
,'price' => 0.004
,'quantity' => 10000
)
,'sum' => array(
'value' => 16500
,'count' => 3
)
)
,'price' => array(
'min' => array(
'id' => 8
,'quote_id' => 4
,'price' => 0.004
,'quantity' => 10000
)
,'max' => array(
'id' => 1
,'quote_id' => 1
,'price' => 0.01
,'quantity' => 100
)
)
)
,'other' => array(
'qty' => array(
'min' => array(
'id' => 5
,'quote_id' => 3
,'price' => 0.018
,'quantity' => 250
)
,'max' => array(
'id' => 3
,'quote_id' => 2
,'price' => 0.0041
,'quantity' => 10000
)
,'sum' => array(
'value' => 25950
,'count' => 4
)
)
,'price' => array(
'min' => array(
'id' => 2
,'quote_id' => 2
,'price' => 0.0038
,'quantity' => 8200
)
,'max' => array(
'id' => 5
,'quote_id' => 3
,'price' => 0.018
,'quantity' => 250
)
)
)
)
[ / UPDATE ]
現在、私は個々のクエリからすべてのデータを取得し、それをすべて大昔の配列にアセンブルしています。
私はこれを行うためのより良い方法がなければならないと思っています:)