如何使用mysql一起显示两个表行

时间:2015-05-19 06:27:53

标签: php mysql

我在mysql phpmyadmin中有两个表

1)参加

  1. user_name
  2. 日期
  3. 2)出席

    1. user_name
    2. 日期
    3. 结帐
    4. 这是一张表

      attend table
      _____________________________________________________
      user_name | date     |  checkin 
      
        abcd   |   10-5-2015 | 2:00  
        xyz    |   10-5-2015 | 3:00 
      
      
      attendout table
      _____________________________________________________
      user_name | date     |  checkout
      
        abcd   |   10-5-2015 | 5:00
        xyz    |   10-5-2015 | 6:00 
      

      我想要这样的结果

      _____________________________________________________
       User    | Date      |  Check in |  Check out
        abcd   | 10-5-2015 | 2:00      | 5:00 
        xyz    | 10-5-2015 | 3:00      | 6:00 
      

      这里是mysql代码

       $result1 = mysql_query("SELECT attend.user_name,attend.date,attend.checkin, attendout.checkout ".
       "FROM attend, attendout ".
          "WHERE attend.date BETWEEN '$a' AND '$b' = attendout.date BETWEEN '$a' AND '$b'");
      

      PLZ帮我修复它

4 个答案:

答案 0 :(得分:1)

这是一个简单的连接:

SELECT attend.user_name,attend.date,attend.checkin, attendout.checkout ".
 "FROM attend join  attendout on attend.user_name=attendout.user_name ".
    "WHERE attend.date BETWEEN '$a' AND '$b' = attendout.date BETWEEN '$a' AND '$b'

但请停止使用已弃用的mysql_ API使用mysqli_*PDO准备好的语句。

答案 1 :(得分:1)

如果系统中始终有一个1-1条目,即一个日期签入结账一个条目,那么您应该尝试左连接,如下所示

SELECT at.user, at.date, at.checkin, ao.checkout from attend at LEFT JOIN  attendout ao  ON at.date = ao.date 

where条件也是可选的。您可能会也可能不会添加它。

答案 2 :(得分:0)

你必须使用内连接。

 SELECT * FROM attend
 INNER JOIN attendout
 ON attend.user_name=attendout.user_name
 ORDER BY attend.user_name

答案 3 :(得分:0)

它可以正常工作

criteria(R,[_,_,N1],[_,_,N2]) :- N1=\=N2, !, compare(R,N2,N1).
criteria(R,E1,E2) :- compare(R,E1,E2).