簡體   English   中英

Laravel中3個表的復雜INNER JOIN Mysql查詢

[英]Complicated INNER JOIN Mysql Query From 3 Tables in Laravel

我已經解決了幾個小時。 我想到了laravel關系,但不知道如何傳遞第二個條件,因為我需要關聯3個表。 我想在laravel中使用以下查詢。

SELECT
subscriptions.subscribed_to,
broadcasts. *,
FROM subscriptions
INNER JOIN broadcasts
WHERE subscriptions.subscriber = {$user_id}
AND (
    SELECT COUNT(*) FROM seen_broadcasts
    WHERE user_id = {$user_id}
    AND broadcast_id = broadcasts.id
) = 0
ORDER BY  broadcast.date DESC

有3張桌子。

  1. subscriptions :subscriber_id 訂閱 broadcaster_id。
  2. broadcasts :保存廣播者的消息的位置。
  3. seen_broadcast :訂戶閱讀廣播時將其信息保存到的位置。 這有助於我們向廣播公司提供詳細的統計信息。 user_id = subscriber_user_id, broadcast_id = broadcast_message_id

我希望能夠從userA訂閱但尚未看到的所有廣播公司獲取廣播。

上面的查詢當前可在laravel外運行。

經過許多變通后,我最終得到了這一點:

$broadcast_result = DB::select( DB::raw("
                                        SELECT
                                        subscriptions.subscribed_to,
                                        broadcasts.*
                                        FROM subscriptions
                                        INNER JOIN broadcasts
                                        WHERE subscriptions.browser_agent_id = :subsc_id
                                        AND broadcasts.user_id = subscriptions.subscribed_to
                                        AND (
                                            SELECT COUNT(*) FROM broadcasts_seen
                                            WHERE broadcast_id = broadcasts.id
                                            AND subscriber_id = subscriptions.subscriber_id
                                        ) = 0
                                        ORDER BY  broadcasts.date DESC LIMIT 1
                                    "), array(
                                       'subsc_id' => $subscriber->id
                                     ));
$broadcast_set = $broadcast_result[0];

還添加use DB; 在控制器中。

如果有更好的方法,請分享。

暫無
暫無

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

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