은 현재 진행중인 버전입니다.MySQL : MIN() 및 MAX() 쿼리를 결합 할 수 있습니까?
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
일부 자원을 절약하고 더 적은 수의 검색어로 결합 할 수있는 좋은 방법이 있습니까?
아니면이 방법이 그 방법입니까?
여기에 재생 일부 샘플 데이터의 [이 UPDATE] : 궁극적으로
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);
, 우리는 잘 배열로 모든 데이터를 포장하고 싶다. 우리가 실제 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]
지금, 그때 큰 올 '배열로 모든 조립, 우리의 개별 쿼리에서 모든 데이터를 얻고있다. 내가 생각하고는 가이이 :) 할 수있는 더 좋은 방법이 될 수있어 거기에
질의가 단순화되거나 난해 해지 겠지만 나 같은 사람들은 [MySQL의 GROUP BY 지원] (http://dev.mysql.com/)으로 인해 결과가 임의로 발생할 수 있다는 것을 의미하는 'GROUP BY'부족에 중점을 둘 것입니다. doc/refman/5.0/ko/group-by-hidden-columns.html). –
@ omg-ponies 감사합니다.질문은 이제 더 많은 정보로 업데이트되어 내가 성취하고자하는 것을 명확하게 설명합니다. – mOrloff
BTW, 원하는 결과를 배열로 넣습니다. 데이터를 pkg 할 계획이기 때문에뿐만 아니라 이해하기가 가장 쉽다고 생각하기 때문에 (대부분) 그렇게합니다. ... 나는 다른 사람들에게도 그렇게되기를 바랍니다 :) – mOrloff