在mysql中连接两个表并从第二个表中读取值

时间:2017-07-30 16:07:52

标签: php mysql

我想通过将try { $att = $att->query('select att_time,att_date,att_card_no from att_detail WHERE att_card_no IN (select name from att_user where cardno="2342323423")'); $att -> execute(); $result = $att -> fetch(); } catch (PDOException $e){ echo $att . "<BR>" . $e->getMessage(); } $att -> execute(); ?> <?php echo "Name: ".$result['att_card_no']; ?> Table:att_detail +---------+----------+-------------+------------+ | no | att_time | att_date | att_card_no| +---------+----------+-------------+------------+ | 1 | 08:01 | 11-12-17 | 2342323423 | | 2 | 08:02 | 12-12-17 | 4574574577 | | 3 | 08:03 | 13-12-17 | 4656456796 | | 4 | 08:04 | 14-12-17 | 9343450984 | +---------+----------+-------------+------------+ Table: att_user +----+-------------+-------------+ | no | name | cardno | +----+-------------+-------------+ | 1 | name1 | 2342323423 | | 2 | name2 | 4574574577 | | 3 | name3 | 4656456796 | | 4 | name4 | 9343450984 | +----+-------------+-------------+ 表中att_card_no的值与att_user表中的cardno相匹配来显示名称。

Results = [
        ["Names  :", []]
        ["Score 1:", []]
        ["Score 2:", []]
        ["Score 3:", []]
        ["Mean   :", []]
        ]

但是不显示att_user的名称值。欣赏这里的错误。也没有错误抛出。

编辑:如果你无法回答,或者如果你发现类似的问题可以解决我的问题,请告诉我,因为我的搜索没有找到任何信息但是投票结果这个问题没有帮助

3 个答案:

答案 0 :(得分:2)

您的SQL语句存在一些问题。

由于名称不在列的选择列表中,因此不会出现在结果列表中 组。在你的位置,你试图匹配att_card_no =赢得的名字 永远匹配。

这是您的SQL语句:

select 
    att_time,
    att_date,
    att_card_no 
from att_detail 
WHERE att_card_no IN (select name from att_user where cardno="2342323423")

但这是你真正想要的:

select 
    b.`name`,
    a.`att_time`,
    a.`att_date`,
    a.`att_card_no` 
from ent a 
JOIN att_user b
ON a.`att_card_no` = b.`cardno`;

答案 1 :(得分:1)

您需要使用JOIN查询,如下所示: -

(SELECT att_user.name,att_detail.att_time,att_detail.att_date,att_detail.att_card_no FROM att_user LEFT JOIN att_detail on  att_user.cardno = att_detail.att_card_no WHERE att_user.cardno="2342323423");

<强> 注: -

您的查询实际上是这样转换的: -

'select att_time,att_date,att_card_no from att_detail WHERE att_card_no IN ("name1")'

所以基本上没有选择name列,并且母鸡不会来。

答案 2 :(得分:1)

你应该使用JOIN

 $att = $att->query('
    select a.att_time
    , a.att_date
    , a.att_card_no 
    , b.name 
  from att_detail  as a
  inner join att_user as b on a.att_card_no = b.card_no and b.cardno="2342323423"'