mysql 搜索查询的问题

plcc123 2019-05-23 10:16:52
数据结构如下:

id name price origin

1 数据1 88.00 新浪
2 数据2 18.00 百度
3 数据3 58.00 谷歌
4 数据4 78.00 谷歌
5 数据5 98.00 百度
6 数据6 18.00 百度
7 数据7 28.00 问问
8 数据8 38.00 问问
9 数据9 38.00 新浪
......
1004 数据1004 78.00 谷歌
1005 数据1005 98.00 百度
1006 数据1006 18.00 百度
1007 数据1007 28.00 问问
1008 数据1008 38.00 问问
1009 数据1009 38.00 新浪

我要搜索查询的时候得出的结果满足这样的条件:
分页后每页10条,这10条里面的数据 origin 必须是 “新浪,百度,谷歌,问问” 中的,具体几条可以随机
...全文
193 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
AHUA1001 2019-06-10
  • 打赏
  • 举报
回复
假设你有1000条数据,而新浪,百度,谷歌,问问的数据量,一共只有4条,那么第3页的数据,如何显示。
plcc123 2019-05-24
  • 打赏
  • 举报
回复
引用 6 楼 受了伤风的星辰 的回复:
有个笨拙的方法,
select * from (select * from test where origin='百度' order by id limit 0,2) a
union all
select * from (select * from test where origin='谷歌' order by id limit 0,2) b
union all
select * from (select * from test where origin='新浪' order by id limit 0,2) c
union all
select * from (select * from test where origin='问问' order by id limit 0,2) d
union all
select * from (select * from test where originnot in ('百度','谷歌','新浪','问问') order by id limit 0,2) e;


这样有个弊端,就是前面8条数据的顺序太固定了,有办法把他们弄成随机显示的吗?
plcc123 2019-05-24
  • 打赏
  • 举报
回复
引用 6 楼 受了伤风的星辰 的回复:
有个笨拙的方法,
select * from (select * from test where origin='百度' order by id limit 0,2) a
union all
select * from (select * from test where origin='谷歌' order by id limit 0,2) b
union all
select * from (select * from test where origin='新浪' order by id limit 0,2) c
union all
select * from (select * from test where origin='问问' order by id limit 0,2) d
union all
select * from (select * from test where originnot in ('百度','谷歌','新浪','问问') order by id limit 0,2) e;

可以,谢谢
遇星 2019-05-24
  • 打赏
  • 举报
回复
在之前的结果基础上,再按照id排序就行了
plcc123 2019-05-23
  • 打赏
  • 举报
回复
引用 3 楼 受了伤风的星辰 的回复:
[quote=引用 2 楼 plcc123 的回复:]
[quote=引用 1 楼 受了伤风的星辰 的回复:]
第一页:
select id,name,price,origin from tab where id>0 and origin in ('新浪','百度','谷歌','问问') order by id limit 10;
记下这一页最后一行的id值,假设为num,
第二页:
select id,name,price,origin from tab where id>num and origin in ('新浪','百度','谷歌','问问') order by id limit 10;
以此类推。


不行,得出的都是同一个,比如都是origin=新浪的数据[/quote]

你的意思是返回的数据一定要包含“新浪,百度,谷歌,问问”这四个?[/quote]
是的,只要数据库有这10条数据里面一定要包含这四个,其他6条数据随机显示,或者能做到这每个*2 ,那么就是 这四个*2 -8 条数据,另外两条随意 就更好了
遇星 2019-05-23
  • 打赏
  • 举报
回复
引用 2 楼 plcc123 的回复:
[quote=引用 1 楼 受了伤风的星辰 的回复:] 第一页: select id,name,price,origin from tab where id>0 and origin in ('新浪','百度','谷歌','问问') order by id limit 10; 记下这一页最后一行的id值,假设为num, 第二页: select id,name,price,origin from tab where id>num and origin in ('新浪','百度','谷歌','问问') order by id limit 10; 以此类推。
不行,得出的都是同一个,比如都是origin=新浪的数据[/quote] 你的意思是返回的数据一定要包含“新浪,百度,谷歌,问问”这四个?
plcc123 2019-05-23
  • 打赏
  • 举报
回复
引用 1 楼 受了伤风的星辰 的回复:
第一页:
select id,name,price,origin from tab where id>0 and origin in ('新浪','百度','谷歌','问问') order by id limit 10;
记下这一页最后一行的id值,假设为num,
第二页:
select id,name,price,origin from tab where id>num and origin in ('新浪','百度','谷歌','问问') order by id limit 10;
以此类推。


不行,得出的都是同一个,比如都是origin=新浪的数据
遇星 2019-05-23
  • 打赏
  • 举报
回复
第一页: select id,name,price,origin from tab where id>0 and origin in ('新浪','百度','谷歌','问问') order by id limit 10; 记下这一页最后一行的id值,假设为num, 第二页: select id,name,price,origin from tab where id>num and origin in ('新浪','百度','谷歌','问问') order by id limit 10; 以此类推。
遇星 2019-05-23
  • 打赏
  • 举报
回复
有个笨拙的方法, select * from (select * from test where origin='百度' order by id limit 0,2) a union all select * from (select * from test where origin='谷歌' order by id limit 0,2) b union all select * from (select * from test where origin='新浪' order by id limit 0,2) c union all select * from (select * from test where origin='问问' order by id limit 0,2) d union all select * from (select * from test where originnot in ('百度','谷歌','新浪','问问') order by id limit 0,2) e;
plcc123 2019-05-23
  • 打赏
  • 举报
回复
有大神在吗?请求帮忙!

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧