我遇到了以下问题。
我有一个网站,例如超市购物项目。人们可以在网站上搜索物品。 现在我想在搜索结果页面上显示我选择提供的前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
我希望这能解释我的目标。
非常感谢您的任何帮助或建议!
答案 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