我在mySQL数据库中有两个表。
我使用以下代码查询表:
$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
功能不会干扰。
答案 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