坚持建立MySQL查询

时间:2018-03-26 11:23:29

标签: php mysql symfony doctrine dql

给出一个表的例子:

id | item_id | user_id | bid_price
----------------------------------

任务是为所提供的集合中的每个bid_price选择 最小 item_id

例如:item_id = [1, 2, 3] - 所以我需要选择最多三(3)行,最少bid_price

数据示例:

id | item_id | user_id | bid_price
----------------------------------
 1 |    1    |   11    |     1
 2 |    1    |   12    |     2
 3 |    1    |   13    |     3
 4 |    1    |   14    |     1
 5 |    1    |   15    |     4
 6 |    2    |   16    |     2
 7 |    2    |   17    |     1
 8 |    3    |   18    |     2
 9 |    3    |   19    |     3
10 |    3    |   18    |     2

预期结果:

id | item_id | user_id | bid_price
----------------------------------
 1 |    1    |   11    |     1
 7 |    2    |   17    |     1
 8 |    3    |   18    |     2

实际上,我使用的是Symfony / Docine DQL,但使用简单的SQL示例就足够了。

3 个答案:

答案 0 :(得分:2)

对于行中的所有列,您可以在subselect上使用内部联接以获得最低出价

select m.id, m.item_id, m.user_id, m.bid_price
from my_table m 
inner join ( 
select item_id, min(id) min_id,  min(bid_price) min_price
from my_table 
where   item_id IN (1,2,3)
group by item_id 
) t on t.item_id = m.item_id 
   and t.min_price= m.bid_price
   and t.min_id = m.id

或..如果你有一些浮动数据类型,你可以使用acst进行无符号

  select m.id, m.item_id, m.user_id, cast(m.bid_price as UNSIGNED) 
  from my_table m 
  inner join ( 
  select item_id, min(id) min_id,  min(bid_price) min_price
  from my_table 
  where   item_id IN (1,2,3)
  group by item_id 
  ) t on t.item_id = m.item_id 
     and t.min_price= m.bid_price
     and t.min_id = m.id 

答案 1 :(得分:1)

您可以在查询中使用MIN() GROUP BY

SELECT id, item_id, MIN(bid_price) AS min_bid, user_id 
FROM your_tbl 
GROUP BY item_id 
HAVING item_id in(1, 2, 3);

答案 2 :(得分:0)

使用此查询:

SELECT id, item_id, user_id, min(bid_price) as bid_price 
FROM YOUR_TABLE_NAME 
GROUP BY item_id;