sql >> Databáze >  >> RDS >> Mysql

Jak implementovat můj příkaz SQL v Laravelu?

Můžete to vyřešit pomocí DB::statement , DB:raw a DB::select .

Kód je testován na mém testovacím prostředí Laravel 5.0 a funguje perfektně.

Váš příkaz mysql je také testován a funguje perfektně na konzoli MySQL.

Zde je kód:

DB::statement(DB::raw('SET @prev=0,@rownum=0'));

$results =
    DB::select(
        DB::raw("
          SELECT utilizador_id, nome
          FROM (
            SELECT *,
                 IF( @prev <> utilizador_id,
                     @rownum := 1,
                     @rownum := @rownum+1
                 ) AS rank,
                 @prev := utilizador_id,
                 @rownum
            FROM (
              SELECT * FROM `anuncios`
              ORDER BY utilizador_id, rand()
            ) AS random_ads
          ) AS ads_ranked
          WHERE rank <= 2;
        ")
    );

Zobrazit výsledky

echo "utilizador_id | nome <br />";

foreach ($results as $result)
{
    echo $result->utilizador_id . "__________| " . $result->nome . "<br />";
}

Pamatujte přidat use DB; za jmenným prostorem:

<?php

namespace App\Http\Controllers;

use DB;

Udělal jsem kód pro zobrazení výsledků pouze pro demonstraci všech výstupů výsledků, ale je na vás, jak s daty ve svém kódu naložíte.

Výsledky testu

Náhodné výsledky vašeho příkazu mysql v konzoli MySQL

Náhodné výsledky vašeho výpisu mysql v Laravel

Poznámka:

1- Tuto otázku jsem pro vás vyřešil sám, ale narazil jsem na malý problém a dostal jsem příspěvek od Kryptonit3 na fóru Laracast.

2- Můžete najít jiná řešení této otázky nebo ji lze vyřešit různými způsoby, ale já jsem se rozhodl vyřešit tento způsob.

Úplnou otázku a odpověď v poznámce 1 naleznete zde .




  1. Jak vybrat omezené množství řádků pro každý cizí klíč?

  2. Najděte pozici textu, extrahujte text a vložte do nového sloupce v MySQL

  3. PostgreSQL dotaz s 'ANY' nefunguje

  4. Vytvořte databázi pomocí uložené funkce