对于楼主的可能1:使用一个“type”,值为0、1,0表示来自Customer,1表示来自Admin,连接条件还是一样,可以在where条件加上: and Comment.type=0 (根据你自己需要取哪个)
对于楼主的可能2:可以给默认值呀,比如:数值型就可以默认为零,字符串类型可以默认为空

解决方案 »

  1.   

    方案1语句 : 
    select * from comment left join client on client.id = comment.commenter_id and comment.commenter_table = 'client' 
    left join admin on admin.id = comment.commenter_id and comment.commenter_table = 'admin';
    你是指这样吗?这2个方案是否算是最佳方案呢? 
      

  2.   

    方案1比较利于扩展,比方案2好,现在就两种身份,如果有十种身份,方案2就得有十个相应字段。
    你可以尝试用union all将两种类型分开查询,减少无用的联表查询。
    最佳方案就要看你的具体需求了,你的方案1比较适用于大多数情况。
      

  3.   

    2.ID | message | user_id | rolerole --> (admin, customer)   .