我有两张桌子,一张是存放工具,另一张是工具历史记录,比如位置和谁有。我需要在这个表上运行一个搜索问题,并且已经尝试过了
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']."'但问题是,我只想在历史表中搜索最后插入的那个工具行。例如,当您按位置搜索工具时,您只想获得现在存在的工具。
有办法吗?
发布于 2014-10-20 10:19:39
附带注意:看起来您使用的是PHP,而不是准备好的语句,请查看http://php.net/manual/en/pdo.prepared-statements.php或http://php.net/manual/en/mysqli.quickstart.prepared-statements.php以避免使用http://en.wikipedia.org/wiki/SQL_injection。
实际上有一个关于这个的官方MySQL文档中的文章,类似的事情已经解决了,这里和这里。
您需要运行一个子查询来获取“最新”历史记录的id (假设使用max id的记录是正确的),然后使用该id获取正确的记录。
注意:我已经用http://php.net/manual/en/pdo.prepared-statements.php#example-952替换了内联的php变量
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,以确保它高效工作。
发布于 2014-10-20 10:05:01
在查询中插入limit 1 order by 'your field' desc
https://stackoverflow.com/questions/26462966
复制相似问题