sql >> Databasteknik >  >> RDS >> Mysql

Hur implementerar jag min sql-sats i Laravel?

Du kan lösa detta genom att använda DB::statement , DB:raw och DB::select .

Koden är testad i min Laravel 5.0-testmiljö och den fungerar perfekt.

Din mysql-sats är också testad, den fungerar perfekt på MySQL-konsolen.

Här är koden:

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;
        ")
    );

Visa resultat

echo "utilizador_id | nome <br />";

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

Kom ihåg för att lägga till use DB; efter namnutrymmet:

<?php

namespace App\Http\Controllers;

use DB;

Jag har skapat Visa resultatkod endast för att visa alla resultat, men det är upp till dig hur du ska manipulera data i din kod.

Testresultat

Slumpmässiga resultat av din mysql-sats i MySQL-konsolen

Slumpmässiga resultat av din mysql-sats i Laravel

Obs!

1- Jag har löst den här frågan själv åt dig men jag stod inför ett litet problem och jag fick input från Kryptonit3 i Laracast-forumet.

2- Du kanske hittar andra lösningar på den här frågan eller så kan den lösas på olika sätt, men jag har valt att lösa detta sätt.

Hela frågan och svaret i not 1, kan hittas här .




  1. EF Core med Mysql som inte byggnadsställningar BIT(1) till Boolean

  2. Oracle JDBC-prestanda för ResultSet

  3. Främmande nycklar kontra partitionering

  4. Ta bort dubbletter av rader i en tabell utan primärnyckel