Mysql 具有多个内部联接的高级搜索查询';I don’我没有按预期工作

Mysql 具有多个内部联接的高级搜索查询';I don’我没有按预期工作,mysql,inner-join,Mysql,Inner Join,结构 成员id(自动,整数),全名(varchar),isReseller(枚举),经销商id(整数),国家id,城市id,城镇id,固定电话,管理员(枚举) 订阅id(自动,整数),事务id(整数),杂志id(整数),货物(varchar),起始日期(日期),结束日期(日期),活动(枚举),状态(枚举),经销商id(整数),会员id(整数) 交易id(自动,整数),银行账户id(整数),会员id(整数),创建者管理id(整数),付款日期(日期) 杂志id(自动,整数),名称(varchar)

结构


成员id(自动,整数),全名(varchar),isReseller(枚举),经销商id(整数),国家id,城市id,城镇id,固定电话,管理员(枚举)

订阅id(自动,整数),事务id(整数),杂志id(整数),货物(varchar),起始日期(日期),结束日期(日期),活动(枚举),状态(枚举),经销商id(整数),会员id(整数)

交易id(自动,整数),银行账户id(整数),会员id(整数),创建者管理id(整数),付款日期(日期)

杂志id(自动,整数),名称(varchar)

银行账户id(自动、整数)、名称(varchar)

查询


问题


  • 经销商可以为其他会员下订单
  • 我将经销商与会员保存在同一数据库中。isReseller值为1
  • 当成员有经销商时,经销商id大于0(经销商的成员id值)
  • 当经销商下订单时,它也会创建交易记录
  • 上面的此查询显示经销商完成的每个订阅订单,而不考虑成员和订阅状态的任何搜索条件(如果我搜索
    active='1'
    ,它仍然显示所有)

    即使我会写信给John,它也会显示所选经销商的所有订单

    这就好像我只是为了搜索经销商的订单而查询给定的付款日期(
    t.paymentDate介于'2011-10-01'和'2011-10-29'

    我不知道如何解释这种情况。如果我不清楚,请让我知道,我会尝试编辑我的问题,并更具体


    提前谢谢。

    我不清楚您到底想要返回哪些数据,但我认为您可能应该从事务中加入成员(仅一次),然后进行分组以计算订单数量(如果您需要的话)。 还请注意,AND在OR之前求值-因此最终OR语句与所有AND一起求值。使用括号()将OR/AND/INTERWARD语句正确分组。

    内部联接:

    INNER JOIN  asw_members as mm ON mm.id = t.member_id
    
    已经保证t.member_id=mm.id,因此在OR语句的where子句中添加完全相同的条件可以保证仅基于连接就可以得到完整的集合。参见上面关于括号的答案

    如果mm是经销商,m是会员,我认为您需要以下信息:

    INNER JOIN asw_members as mm ON (mm.id = t.member_id OR t.member_id = mm.id)
    
    然后在WHERE子句中:

    m.reseller_id = mm.id AND
    s.reseller_id = mm.id AND
    mm.id = '45677' AND
    ....<other filters>
    
    m.reseller\u id=mm.id和
    s、 经销商id=mm.id和
    mm.id='45677'和
    ....
    

    有时,如果您要两次加入一个表,您可能希望将您的经销商简写为r,将您的成员简写为m。这样更容易记住谁是谁

    你好,谢谢你的帮助。我想在再次检查之前休息一下。不幸的是,
    内部加入asw_成员为mm ON(mm.id=t.member_id或t.member_id=mm.id)
    没有这样做:(我仍然收到所有经销商成员的订单。哇,我完全忘记了。这解决了问题。
    (t.creator\u admin_id='45677'或t.member_id='45677')
    非常感谢您的帮助。
    m.reseller_id = mm.id AND
    s.reseller_id = mm.id AND
    mm.id = '45677' AND
    ....<other filters>