2017-07-30 86 views
2

我想通過將ent表中的att_card_no的值與att_user表中的cardno進行匹配來顯示名稱。在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_user的名稱值。感謝您瞭解這裏出了什麼問題。也沒有錯誤拋出。

編輯:如果你不能回答這個問題,或者如果您發現類似Q,解決了我的問題,請讓我知道,因爲我的搜索沒有找到任何而是反對投票這個問題是沒有幫助一點

+0

爲什麼要「名」顯示,如果你不選擇它?你爲什麼認爲「att_card_no」在「select name ...」中? –

+0

@ MichaelO.如果您滾動瀏覽,則可以看到我確實在第二個表att_user中選擇了它。檢查表 – X10nD

+0

'WHERE att_card_no IN(select name'沒有意義,因爲'att_card_no'是一個包含數字的列,'name'是一個包含字符串的列 –

回答

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列在那裏被選中,並且母雞沒有來。

+0

它的工作.... 你能告訴我什麼是我的sql語句錯誤,它沒有工作嗎 – X10nD

+0

所以現在它的工作? –

+0

是的,但爲什麼沒有我的聲明沒有工作? – X10nD

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"' 
2

有幾個問題與你的SQL語句。

由於名稱不在select的列表列表中,因此它不會出現在結果集 中。在你的地方,你正試圖匹配att_card_no = name,這不會有 的匹配。

這是你的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`; 
相關問題