2017-01-16 141 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