【问题标题】:How to get data from two table on basis of two column match如何根据两列匹配从两个表中获取数据
【发布时间】:2016-11-03 19:45:42
【问题描述】:

我有一个三表 Userregistration、paytransaction 和 requesttransaction,在其中我必须从具有相同用户 ID 和手机号码的所有表中获取数据,在这些表中我得到了 fromuser 和 touser 的以下详细信息,例如 fromname、fromnumber、fromemail 和详细信息touser 是 toname,tonumber 但我也无法获取用户的电子邮件 ID,它会根据联系号码找到。下面是我的表结构。

用户注册

id   contactname    mobile_no     email
.................................................
5     varun         8817          abc@gmail.com
112   chetan        1234          def@gmail.com

支付交易

id userid  fromname  fromnumber tocontactname   tocontactnumber  status
...........................................................................
1    5       varun     8817       chetan           1234            pay

请求交易

id userid  fromname  fromnumber tocontactname   tocontactnumber  status
...........................................................................
1    112    chetan     1234       varun           8817        request
2    112    chetan     1234       ankit           123         request

如果用户在用户表中注册,我想要此输出,然后获取电子邮件 ID,否则为空白

id userid  fromname  fromnumber  fromemail       tocontactname    tocontactnumber  toemail       status
    ...........................................................................
1    5     varun      8817       abc@gmail.com        chetan           1234      def@gmail.com   pay
3   112    chetan     1234      def@gmail.com          varun           8817      abc@gmail.com   request
4   112    chetan     1234      def@gmail.com           ankit           123                      request

此处 ankit 用户未注册,因此他的 toemail id 为空白,我使用了以下查询,但我无法根据 cotactnumber 找到 toemailid。我尝试了以下查询,但我无法获取 toemail id。

SELECT Userregistration.`id`,paytransaction.`id`,paytransaction.`userid`,paytransaction.`fromname`,paytransaction.`fromnumber`,Userregistration.email as fromemail,paytransaction.`contactname` as toname,paytransaction.`contactnumber` as tonumber FROM `paytransaction` INNER JOIN Userregistration ON paytransaction.`userid`=Userregistration.`id` UNION SELECT Userregistration.`id`,requesttransaction.`id`,requesttransaction.`userid`,requesttransaction.`fromname`,requesttransaction.`fromnumber`,Userregistration.email as fromemail,requesttransaction.`contactname` as toname,requesttransaction.`contactnumber` as tonumber FROM `requesttransaction` INNER JOIN Userregistration ON requesttransaction.`userid`=Userregistration.`id` 

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    如果我正确理解你想要获得的内容,你应该使用两个内连接而不是联合

    SELECT 
        a.`id`
        ,requesttransaction.`id`
        ,requesttransaction.`userid`
        ,requesttransaction.`fromname`
        ,requesttransaction.`fromnumber`, 
        ,a.email as fromemail 
        ,requesttransaction.`toname`
        ,requesttransaction.`tonumber`,         
        ,b.email as toemail 
        ,requesttransaction.`contactname` as toname2
        ,requesttransaction.`contactnumber` as tonumber2
        FROM requesttransaction
        left JOIN Userregistration as a  ON requesttransaction.`fromnumber`= a.`mobile_no` 
        left JOIN Userregistration as b  ON requesttransaction.`tonumber`= b.`mobile_no` 
    

    【讨论】:

    • 您好,查询中有很多错误,我无法运行它。
    • 是的,它工作正常,但它只在 fromuser 和 touser 都已注册的情况下提供数据,但我想如果用户未在 useregistration 表中注册,那么它会用空白代替 toemail id,但它应该返回我在我的问题中提到的剩余字段,例如 ankit 没有被 regitered,但是它给出了其他字段的数据。
    • 我已经更新了未注册用户的答案。
    猜你喜欢
    • 2014-12-08
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多