我有两张表,一张保存工具,另一张保存工具历史记录,例如位置和谁拥有它。我需要在此表上运行搜索问题并尝试过此操作
SELECT tblmaskin.*
FROM `tblmaskin`
INNER JOIN tblmaskinhistorik ON tblmaskin.maskinId=tblmaskinhistorik.maskinId
WHERE tblmaskin.maskin='".$_POST['sok']."'
OR tblmaskinhistorik.var='".$_POST['sok']."'
OR tblmaskinhistorik.anvandarnamn='".$_POST['sok']."'
但问题是我只想在历史表中搜索该工具的最后插入行。例如,当您按地点搜索工具时,您只想获取现在就在那里的工具。
有办法做到这一点吗?
最佳答案
旁注:看起来您正在使用 PHP,但没有使用准备好的语句,请查看 PDO
或mysqli
避免SQL injection 。
实际上有一个 article in official MySQL docs关于这个+类似的事情已经解决了here和 here .
您需要运行子查询来获取“最新”历史记录的 ID(假设具有最大 ID 的记录是正确的),然后使用该 ID 来获取正确的记录。
注意:我已将您的内联 php 变量替换为 PDO's named placeholders
SELECT tblmaskin.*
FROM `tblmaskin`
-- Select record from tblmaskinhistorik with the highest id
INNER JOIN (SELECT maskinId, MAX(maskinhistId) AS maxid
FROM tblmaskinhistorik
GROUP BY maskinId) AS t_max
ON t_max.maskinId = tblmaskin.maskinId
-- Joining whole row
INNER JOIN tblmaskinhistorik ON t_max.maxid=tblmaskinhistorik.maskinhistId
WHERE tblmaskin.maskin=:sok
OR tblmaskinhistorik.var=:sok
OR tblmaskinhistorik.anvandarnamn=:sok
对查询运行 EXPLAIN
以确保其高效工作。
关于MYSQL内连接有限制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26462966/