外键,加入和返回索引

时间:2013-01-29 21:46:59

标签: php mysql foreign-keys left-join

我在mySQL数据库中有两个表。

  • milestones_all(PRIMARY KEY:MSID)
  • user_transactions(FOREIGN KEY:MSID)

我使用以下代码查询表:

   $get_ms = db_query("SELECT * FROM milestones_all
        LEFT JOIN user_transactions on user_transactions.MSID = milestones_all.MSID 
        WHERE milestones_all.MID=$MID  
        AND (user_transactions.tran_status IS NULL OR user_transactions.tran_status=3)
        ORDER BY milestones_all.MSID ASC LIMIT 1"));

    while($ms = $get_ms->fetch_assoc()){
           $MSID = $ms['MSID'];
           $ms_title = $ms['ms_title'];
     }

这里只是SQL:

SELECT * FROM milestones_all
LEFT JOIN user_transactions on user_transactions.MSID = milestones_all.MSID 
WHERE milestones_all.MID=$MID
AND (user_transactions.tran_status IS NULL OR user_transactions.tran_status=3)
ORDER BY milestones_all.MSID ASC LIMIT 1

我要做的是打印milestones_all中任何一行的数据 没有附加user_transactions行,如果有,tran_status中的user_transactions列设置为3

截至目前,查询返回有关返回哪些行的正确结果。确切地返回ms_title应该是什么。问题是:MSID始终返回空白。它在我的数据库中不是空白的。这可能是因为LEFT JOIN正在使用MSID列来查找匹配项吗?也许有更好的方法来做到这一点?

注意:db_query功能不会干扰。

1 个答案:

答案 0 :(得分:1)

是的,这是因为您有两列名为MSID的列。如果您将联接更改为使用USING而不是ON,则会将两列拆分为一个:

SELECT * FROM milestones_all
LEFT JOIN user_transactions USING(MSID) 
WHERE milestones_all.MID=$MID
AND (user_transactions.tran_status IS NULL OR user_transactions.tran_status=3)
ORDER BY milestones_all.MSID ASC LIMIT 1