刚才做项目的时候,遇到了一个问题。想请各位老鸟帮下忙哈 
现在做一个显示用户信息的页面,上面显示一些商家的基本信息,不过有一列是现实用户的类型,类型有两种,一种是试用用户,一种是签约用户。判断试用用户和签约用户的标准是:查看充值记录表中的数据,如果用户信息表中的id和充值表中的用户id字段的值匹配的话,这个用户是就是签约用户,没有的话就是试用用户。现在要把所有的用户查出来,并区别是试用用户还是签约用户。 
显示的例子如下: 
==================================================================================================== 
用户名    用户登录名    账户余额      服务到期时间    服剩余短信条数  用户类型  
==================================================================================================== 
张三      zhanshan        100          2009-8-11        500            签约用户 
李四      lisi            0            2009-11-12        50            试用用户 ====================================================================================================== 
显示的例子就是这样: 
下面是两张表的结构, 
一张是商家信息表(member),一张是充值记录表(payment) 
member表的机构如下: 
id(商家ID) 
member_name(商家名字) 
login_name(商家登录名) 
blance(账户余额) 
last_service_date(服务到期时间) 
sms_count(剩余短信条数) 
另一张是充值表:(payment) 
id (记录ID) 
pay_date (充值时间) 
pay_type  (充值类型) 
amount    (充值金额) 
member_id (用户id) 
============================================================================================================ 
其中查询签约用户的SQL语句,我已经写出来:这样的 
select member.id,member.login_name,member.member_name,member.member_forshort,member.blance,member.last_service_date,member.sms_count,payment.amount, SUM(payment.amount) from member right outer join payment on member.id = payment.member_id 
试用用户的sql: 
select member.id,member.login_name,member.member_name,member.member_forshort,member.blance,member.last_service_date,member.sms_count from member where id not in(select member_id from payment) 逻辑判断我是专门建了一个类,把页面显示的数据设置在这个类中,判断类型是用的一个boolean 类型的字段, 
判断的标准就是看查出来的payment.amount 的值是否大于0,如果大于0,就是签约用户,如果payment.amount等于空,就是试用用户 
现在请各位老鸟,帮我想一下如何写出一下子查出全部的用户,并可以判断类型的sql语句!!!!记住是MYSQL

解决方案 »

  1.   

    试试这个
    select b.id,b.login_name,b.blance,b.last_service_date,b.sms_count,if(a.member_id is NULL,'试用用户','签约用户') 
    ((select distinct member_id from payment) a) right join member b on (b.id=a.id);
      

  2.   

    晕,上面少写了个from :
    select b.id,b.login_name,b.blance,b.last_service_date,b.sms_count,if(a.member_id is NULL,'试用用户','签约用户')
    from 
    ((select distinct member_id from payment) a) right join member b on (b.id=a.id);
      

  3.   

    还得修改一次....
    select b.id,b.login_name,b.blance,b.last_service_date,b.sms_count,if(a.member_id is NULL,'试用用户','签约用户') 
    from 
    ((select distinct member_id from payment) a) right join member b on (b.id=a.member_id);
    这下应该没错了