MySQL Query 2记录在顶部,其余为

时间:2016-01-27 11:58:20

标签: mysql sql

我遇到了以下问题。

我有一个网站,例如超市购物项目。人们可以在网站上搜索物品。 现在我想在搜索结果页面上显示我选择提供的前2项。可以提供更多物品。

因此,例如,有人会搜索洗发水,查询会显示数据库表中的所有洗发水项目,但我只想在查询顶部找到2个洗发水商品。数据库表中可能有2个或更多洗发水提供,然后另一个不会显示。

名称示例:

表:

    id      name      C      D   
----------------------------------
    1       Jack      1      1       
    2       Joe       1      1 
    3       Dave      3      0 
    4       Sue       1      0
    5       Mike      1      1
    6       Steve     4      0
    7       David     1      0 
    8       Susan     4      1 
    9       Marc      1      1
    10      Ronald    4      1
    11      Michael   4      1  

示例1

查询: 在哪里C = 1和D = 1(但最多只有2' D'记录,这些2' D'记录显示在结果的顶部)

所需的查询结果:

    id      name      C      D   
----------------------------------
    1       Jack      1      1       
    2       Joe       1      1  
    4       Sue       1      0
    7       David     1      0  

示例2

查询: 在哪里C = 4和D = 1(但最多只有2' D'记录,这些2' D'记录显示在结果的顶部)

所需的查询结果:

    id      name      C      D   
----------------------------------
    8       Susan     4      1 
    10      Ronald    4      1      
    6       Steve     4      0  

我希望这能解释我的目标。

非常感谢您的任何帮助或建议!

1 个答案:

答案 0 :(得分:1)

这是两个可以与UNION ALL结合使用的查询:

(select * from mytable where c = 1 and d = 1 order by rand() limit 2)
union all
(select * from mytable where c = 1 and d = 0)
order by d desc;

更新:如果您想随机选择两行,请按RAND()排序。 (没有ORDER BY行是任意选择的,这意味着它不能保证在重新运行查询时再次选择相同的两行 - 但很可能。)因为我们需要一个ORDER BY来进行部分查询(第一个)在完整的union-alled查询中查询),我们必须使用括号,因为否则只允许一个ORDER BY,即查询结束时的完整查询。

$i = 0

SQL小提琴:http://sqlfiddle.com/#!9/ed53f6/3