0

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

  • 里程碑_所有(主键:MSID)
  • user_transactions(外键: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_statusin中的列user_transactions设置为3.

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

注意:db_query功能不干扰。

4

1 回答 1

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
于 2013-01-29T22:39:45.097 回答