簡體   English   中英

3 個表的限價/訂單結果

[英]Limit/order result with 3 tables

所以我試圖將子查詢的結果限制為每行一個

    Tables:    
    Companies: id
    Events: id, title, date
    Relations: local_id, foreign_id

select `companies`.*, `e`.`title` 
from `companies` 
left join (
  select `events`.*, `relations`.`local_id` as `pivot_local_id`, `relations`.`foreign_id` as `pivot_foreign_id` 
    from `events` inner join `relations` on `events`.`id` = `relations`.`foreign_id` 
    where `relations`.`local_id` = companies.id 
    order by `date` desc limit 1 
) e on e.pivot_local_id = companies.id

這個 Q 返回“#1054 - 'where 子句中的未知列'companys.id'”。

最后,我想為每個公司獲取 company.* 和“最新事件標題”(如果有的話)。

更復雜的是,我很想知道這是否可以通過 Laravel 5.3 的 Eloquent ORM 來完成。

表公司不可見/可用是子查詢,因此您有錯誤,主查詢中存在的事實不夠。

然后你必須在子查詢中加入表公司,例如(我不知道子查詢是否適合你的范圍)

select `companies`.*, `e`.`title` 
from `companies` 
left join (
  select `events`.*, `relations`.`local_id` as `pivot_local_id`, `relations`.`foreign_id` as `pivot_foreign_id` 
    from `events` inner join `relations` on `events`.`id` = `relations`.`foreign_id` 
    inner join companies on `relations`.`local_id` = companies.id 
    order by `date` desc limit 1 
) e on e.pivot_local_id = companies.id

所以,這是您清理的(不正確的)查詢:

SELECT c.*, e.title
FROM companies c
LEFT JOIN (
SELECT ev.*, r.local_id AS pivot_local_id, r.foreign_id AS pivot_foreign_id
FROM events ev
INNER JOIN relations r on ev.id = r.foreign_id
WHERE r.local_id = c.id 
ORDER BY `date` DESC LIMIT 1 
) e ON e.pivot_local_id = c.id;

這(希望)應該是您打算實施的:

SELECT c.*, ev.title
FROM companies c
LEFT JOIN relations r ON c.id = r.local_id
LEFT JOIN events ev on ev.id = r.foreign_id
WHERE ev.title IS NOT NULL
ORDER BY `date` DESC LIMIT 1;

注意:您可能不需要WHERE ev.title IS NOT NULL ,您應該將date與表別名相關聯。

祝你好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM