MYSQL内连接有限制吗?

时间:2014-10-20 10:00:46

标签: mysql inner-join limit

我有两个表,一个保留工具,另一个保存工具历史记录,如位置和谁拥有它。我需要在这些表上运行一个搜索问题并尝试过这个

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']."'

但问题是我只想在历史记录表中搜索该工具的最后插入行。例如,当您按地点搜索工具时,您只想获得现在的工具。

有办法吗?

SQL Fiddle example

2 个答案:

答案 0 :(得分:1)

附注:看起来你正在使用PHP并且你没有使用预准备语句,请查看PDOmysqli以避免SQL injection

实际上article in official MySQL docs关于此+类似的事情已经解决herehere

您需要运行子查询来获取“最新”历史记录的ID(假设具有最大ID的记录是正确的记录),然后使用该ID获取正确的记录。 / p>

注意:我已使用PDO's named placeholders

替换了内联的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以确保其有效运行。

答案 1 :(得分:-1)

在您的查询中插入limit 1 order by 'your field' desc