2014-10-20 61 views
0

我有两个表格,其中一个是搁置工具,另一个包含位置等工具历史记录以及谁拥有它。我需要运行这个表的检索问题,并尝试这个MYSQL内联加限制?

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

+0

可能的重复http://stackoverflow.com/questions/12600527/accessing-last-inserted-row-in-mysql – Haris 2014-10-20 10:04:13

+0

http://stackoverflow.com/questions/3619030/mysql-join-the-most-最近只有行 – 2014-10-20 10:11:29

回答

1

旁注:看起来你正在使用PHP和你不使用准备好的声明中,检查出PDOmysqli避免SQL injection

实际上有一个article in official MySQL docs关于这个+类似的东西已经解决了herehere

您需要运行一个子查询来获取“”最新的“历史记录的标识(假设记录的最大id是正确的),然后使用该标识获取正确的记录。

注:我已经与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上查询替换你的内联PHP变量,以确保它的工作效率。

+0

不工作,如果我在用户上进行搜索tblmaskinhistorik.anvandarnamn我没有得到用户现在拥有的所有工具,并且我还获得了其他用户工具。 Thanx for try我可能只是欺骗并在包含最后一个用户和地点的工具表中添加两个字段。但它真的激怒了我,我讨厌放弃。 – user2978137 2014-10-20 11:11:17

+0

http://sqlfiddle.com/#!2/e8906/1/0 – user2978137 2014-10-20 11:35:08

+0

@ user2978137它应该是'INNER JOIN tblmaskinhistorik ON t_max.maxid = tblmaskinhistorik.maskinhistId'(错误的id检查),试试看;我将sqlfiddle示例添加到您的问题中。也请添加预期的结果。 – Vyktor 2014-10-20 11:40:48

-1

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

+0

为什么它被标记为负?我很困惑它有什么问题? – Jobayer 2014-10-20 10:09:51

+1

OP想为每个工具取一行而不是一行。 – Vyktor 2014-10-20 10:20:37