2017-01-16 134 views
0

我有一個查詢,它使用一些左連接來取回數據。困境是我想要LIMITORDER BY來自左連接之一的結果,因此限制了返回的總行數。MYSQL限制左連接查詢

我試圖訂購,並限制該表是table4

我的查詢:

SELECT SQL_CALC_FOUND_ROWS e.meta_1, a.requestid, b.clientid, c.job_description, d.forename 
FROM quotations_request AS a 

LEFT JOIN table1 AS b ON (a.assigned_to = b.userid) 
LEFT JOIN table2 AS c ON (a.job_costing = c.jobid) 
LEFT JOIN table3 AS d ON (a.clientid = d.clientid) 
LEFT JOIN table4 AS e ON (e.quotationid = a.requestid) 

WHERE a.archived = '0' AND (e.meta_1 = LCASE('requested')) 

我曾嘗試:

SELECT SQL_CALC_FOUND_ROWS statuss.meta_1, a.requestid, b.clientid, c.job_description, d.forename, 
FROM quotations_request AS a 

LEFT JOIN table1 AS b ON (a.assigned_to = b.userid) 
LEFT JOIN table2 AS c ON (a.job_costing = c.jobid) 
LEFT JOIN table3 AS d ON (a.clientid = d.clientid) 
LEFT JOIN (Select meta_1 from table4 where quotationid = a.requestid ORDER BY uploaded_date DESC LIMIT 0, 1) 
as statuss ON (statuss.quotationid = a.requestid) 

WHERE a.archived = '0' AND (statuss.meta_1 = LCASE('requested')) 

結果:

嘗試上述後,我得到了一個錯誤說a.requestid是在WHERE子句中未知(最後左連接)

+3

並在子查詢中使用LIMIT似乎是合理的......那麼接下來發生了什麼? –

+0

@TimBiegeleisen對不起,我應該添加(更新的問題),然後我結束了錯誤說「a.requestid」是未知的字段。請記住,a.requestid來自第二行的主表 –

+0

第一段中描述的困境與阻止您的查詢運行的錯誤無關。給定第一個查詢中基於e.meta_l的謂詞,LEFT JOIN是非常低效的冗餘,應該是內連接。 – symcbean

回答

0

試試這個:

SELECT SQL_CALC_FOUND_ROWS statuss.meta_1, a.requestid, b.clientid, c.job_description, d.forename 
FROM quotations_request AS a 

LEFT JOIN table1 AS b ON (a.assigned_to = b.userid) 
LEFT JOIN table2 AS c ON (a.job_costing = c.jobid) 
LEFT JOIN table3 AS d ON (a.clientid = d.clientid) 
LEFT JOIN (
    select * 
    from (select 
      t.*, 
      @rn := if(quotationid = @qid, @rn + 1, 
       if(@qid := quotationid, 1, 1) 
      ) rn 
     from (
     select * 
     from table4 
     order by quotationid, uploaded_date desc) t cross join (
      select @rn := 0, @qid := -1 
     ) t2 
    ) t where rn = 1 
) 
as statuss ON (statuss.quotationid = a.requestid) 

WHERE a.archived = '0' AND (statuss.meta_1 = LCASE('requested')) 

用戶變量@Rn和@qid使用從table4中找到最新的1行,最新的uploaded_date,然後將其與其他表加入

+0

我得到一個SQL錯誤,告訴我檢查手冊'從webmanage_uploads order by quotationid,uploaded_date desc)t cros' –

+0

這是我從你的答案粘貼的代碼(修改後的字段名稱與我相關) ,它看起來是否正確? https://codeshare.io/anzz7n –

+0

我無法訪問上述網站。我已經更新了我的答案。你可以試試嗎?在子查詢 – GurV