2014-10-20 65 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