先叙述问题:
有一张表data_user,里面存储的有用信息为mobile--手机号码,Level--用户等级
由于产品设计的特殊性,导致用户可以订购不同的业务,例如手机号码13800138000订购了付费会员,免费会员,短信笑话,彩信会刊等业务
现在要对订购了某一个业务的手机号码进行短信推广,但是用户订购业务过多,一个业务发送了,那么其他的业务就不能再发推广短信
例如:手机号码13800138000订购了付费会员,免费会员,短信笑话,彩信会刊业务,我现在要给付费会员中订购了彩信会刊业务的手机号码发送属于付费彩信会刊的彩信,这里要有13800138000这个手机号码;
我还要给免费会员中订购了彩信会刊业务的手机发送属于免费彩信会刊的彩信,这里就不能有13800138000这个手机号码了.按照上面的逻辑,我应该怎样操作?
我新建了一张表,data_user_tmp.然后select insert到新表了,然后就迷茫了...
有一张表data_user,里面存储的有用信息为mobile--手机号码,Level--用户等级
由于产品设计的特殊性,导致用户可以订购不同的业务,例如手机号码13800138000订购了付费会员,免费会员,短信笑话,彩信会刊等业务
现在要对订购了某一个业务的手机号码进行短信推广,但是用户订购业务过多,一个业务发送了,那么其他的业务就不能再发推广短信
例如:手机号码13800138000订购了付费会员,免费会员,短信笑话,彩信会刊业务,我现在要给付费会员中订购了彩信会刊业务的手机号码发送属于付费彩信会刊的彩信,这里要有13800138000这个手机号码;
我还要给免费会员中订购了彩信会刊业务的手机发送属于免费彩信会刊的彩信,这里就不能有13800138000这个手机号码了.按照上面的逻辑,我应该怎样操作?
我新建了一张表,data_user_tmp.然后select insert到新表了,然后就迷茫了...
解决方案 »
- rand by order如何检索掉某些ID为空的数据条?
- 手工启动mysql服务发生mysqld-nt.exe 应用程序错误
- 谁能帮我精简一下sql语句??
- Mysql 怎样附加数据库啊?
- 数据库连不上
- 求助!!
- 能建数据库,可是建表失败???
- mysql+Apache+phpMyAdmin的配置问题,急。。。
- 不安装sql server 或者mysql、,只靠windows 默认的ODBC能否驱动excel表或者是access表?
- mysql 单表数据30万列表页显示很慢,难道是服务器mysql配置问题?还是我的sql查询语句问题,还是MYSQL对几十万的数据处理本身就慢
- 关于重复记录删除的问题
- ERROR 1206 (HY000): The total number of locks exceeds the lock table size
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
表名:data_user
结构:
id,主键
mobile,手机号码,索引
service,会员服务类型,1付费会员,2免费会员,3免费笑话,4彩信会刊,索引
prov,省份(汉字名称)
city,城市(汉字名称)
手机号码:
18601121001 订购关系:1,2,3,4
18601121002 订购关系:1,3
18601121003 订购关系:1,2,3,4
18601121004 订购关系:1,4
18601121005 订购关系:1,2,3
18601121006 订购关系:1,2,4
18601121007 订购关系:1,2,4
18601121008 订购关系:2,3,4
18601121009 订购关系:2,4
18601121010 订购关系:1,2,3,4
18601121011 订购关系:2,3
18601121012 订购关系:1
18601121013 订购关系:2
18601121014 订购关系:1,2,4
18601121015 订购关系:1,4
18601121016 订购关系:1,3
18601121017 订购关系:2,4
18601121018 订购关系:2,3
18601121019 订购关系:1,2
18601121020 订购关系:1,3以上数据是汇总的,转换为数据库内数据如下18601121001 订购关系:1
18601121001 订购关系:2
18601121001 订购关系:3
18601121001 订购关系:4
18601121002 订购关系:3
18601121002 订购关系:3
18601121003 订购关系:1
18601121003 订购关系:2
18601121003 订购关系:3
18601121003 订购关系:4
18601121004 订购关系:1
18601121004 订购关系:4
18601121005 订购关系:1
18601121005 订购关系:2
18601121005 订购关系:3
18601121006 订购关系:1
18601121006 订购关系:2
18601121006 订购关系:4
18601121007 订购关系:1
18601121007 订购关系:2
18601121007 订购关系:4
18601121008 订购关系:2
18601121008 订购关系:3
18601121008 订购关系:4
18601121009 订购关系:2
18601121009 订购关系:4
18601121010 订购关系:1
18601121010 订购关系:2
18601121010 订购关系:3
18601121010 订购关系:4
18601121011 订购关系:2
18601121011 订购关系:3
18601121012 订购关系:1
18601121013 订购关系:2
18601121014 订购关系:1
18601121014 订购关系:2
18601121014 订购关系:4
18601121015 订购关系:1
18601121015 订购关系:4
18601121016 订购关系:1
18601121016 订购关系:3
18601121017 订购关系:2
18601121017 订购关系:4
18601121018 订购关系:2
18601121018 订购关系:3
18601121019 订购关系:1
18601121019 订购关系:2
18601121020 订购关系:1
18601121020 订购关系:3假设情况:
我现在想给付费会员(订购关系为1)中订购了彩信会刊的用户(订购关系为1,4)发送高级彩信会刊
应该发送给下列用户:
18601121001 订购关系:1,2,3,4
18601121003 订购关系:1,2,3,4
18601121004 订购关系:1,4
18601121006 订购关系:1,2,4
18601121007 订购关系:1,2,4
18601121010 订购关系:1,2,3,4
18601121014 订购关系:1,2,4
18601121015 订购关系:1,4
我再给免费会员(订购关系为2)中订购了彩信会刊的用户(订购关系为2,4)发送免费彩信会刊,
18601121008 订购关系:2,3,4
18601121009 订购关系:2,4
18601121017 订购关系:2,4我解释一下上面的例子,如果我要发送付费会员发送彩信会刊,那么我就会在数据库里取出订购关系为1与4的所有用户
然后在这些用户里面找出所有订购关系即为1又为4的用户,然后发送彩信
当我发送免费彩信会刊的时候,我就取出所有订购关系为2与4的手机号码,然后找出那些订购关系既有2又有4的用户发送彩信我创建了一个临时表data_user_tmp,并且已经insert select完了,把我需要的数据都取了出来,现在纠结在不知道怎么按照我的需求去去重数据.并且不一定拘泥与我已经创建的临时表,只要节省资源耗时短,两张三张都没关系.因为这些临时表在不发送的时候都是空的不知道我这样的说明是否能看明白...
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
CREATE TABLE `data_sms_tmp` (
`mobile_no` varchar(20) NOT NULL default 'NA',
`service_id` varchar(30) NOT NULL,
`prov` varchar(20) NOT NULL,
`city` varchar(20) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=gbkINSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121001', '1', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121001', '2', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121001', '3', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121001', '4', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121002', '3', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121002', '3', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121003', '1', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121003', '2', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121003', '3', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121003', '4', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121004', '1', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121004', '4', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121005', '1', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121005', '2', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121005', '3', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121006', '1', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121006', '2', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121006', '4', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121007', '1', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121007', '2', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121007', '4', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121008', '2', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121008', '3', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121008', '4', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121009', '2', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121009', '4', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121010', '1', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121010', '2', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121010', '3', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121010', '4', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121011', '2', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121011', '3', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121012', '1', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121013', '2', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121014', '1', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121014', '2', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121014', '4', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121015', '1', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121015', '4', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121016', '1', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121016', '3', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121017', '2', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121017', '4', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121018', '2', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121018', '3', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121019', '1', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121019', '2', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121020', '1', '北京', '北京');
INSERT INTO `data_sms_tmp` (`mobile_no`, `service_id`, `prov`, `city`) VALUES ('18601121020', '3', '北京', '北京');
应该发送给下列用户:
18601121001 订购关系:1,2,3,4
18601121003 订购关系:1,2,3,4
18601121004 订购关系:1,4
18601121006 订购关系:1,2,4
18601121007 订购关系:1,2,4
18601121010 订购关系:1,2,3,4
18601121014 订购关系:1,2,4
18601121015 订购关系:1,4mysql> select distinct a.mobile_no
-> from data_sms_tmp a,data_sms_tmp b
-> where a.mobile_no=b.mobile_no
-> and a.service_id=1
-> and b.service_id=4;
+-------------+
| mobile_no |
+-------------+
| 18601121001 |
| 18601121003 |
| 18601121004 |
| 18601121006 |
| 18601121007 |
| 18601121010 |
| 18601121014 |
| 18601121015 |
+-------------+
8 rows in set (0.11 sec)mysql>
我再给免费会员(订购关系为2)中订购了彩信会刊的用户(订购关系为2,4)发送免费彩信会刊,
18601121008 订购关系:2,3,4
18601121009 订购关系:2,4
18601121017 订购关系:2,4
mysql> select distinct a.mobile_no
-> from data_sms_tmp a,data_sms_tmp b
-> where a.mobile_no=b.mobile_no
-> and a.service_id=2
-> and b.service_id=4
-> and not exists (
-> select 1
-> from data_sms_tmp
-> where mobile_no=a.mobile_no and service_id=1
-> );
+-------------+
| mobile_no |
+-------------+
| 18601121008 |
| 18601121009 |
| 18601121017 |
+-------------+
3 rows in set (0.00 sec)mysql>
-> from data_sms_tmp
-> group by mobile_no) a where FIND_IN_SET(1,service_id)>0 and FIND_IN_SET(4,service_id)>0 ;
+-------------+------------+
| mobile_no | service_id |
+-------------+------------+
| 18601121001 | 1,2,3,4 |
| 18601121003 | 4,3,2,1 |
| 18601121004 | 1,4 |
| 18601121006 | 1,2,4 |
| 18601121007 | 4,2,1 |
| 18601121010 | 1,2,3,4 |
| 18601121014 | 1,2,4 |
| 18601121015 | 4,1 |
+-------------+------------+
8 rows in set (0.00 sec)127.0.0.1~root@localhost~test>127.0.0.1~root@localhost~test>select * from (select mobile_no,group_concat(service_id) as service_id
-> from data_sms_tmp
-> group by mobile_no) a where FIND_IN_SET(2,service_id)>0 and FIND_IN_SET(4,service_id)>0
-> and FIND_IN_SET(1,service_id)=0;
+-------------+------------+
| mobile_no | service_id |
+-------------+------------+
| 18601121008 | 2,3,4 |
| 18601121009 | 4,2 |
| 18601121017 | 2,4 |
+-------------+------------+
3 rows in set (0.00 sec)
这样用子表的方式,肯定没狼头哥的好。但看起来比较直观,适合我这样的菜鸟。呵呵