sql >> Database teknologi >  >> RDS >> Mysql

Hvordan implementerer jeg min sql-sætning i Laravel?

Du kan løse dette ved at bruge DB::statement , DB:raw og DB::select .

Koden er testet på mit Laravel 5.0 testmiljø, og det fungerer perfekt.

Din mysql-sætning er også testet, den fungerer perfekt på MySQL-konsollen.

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

Se resultater

echo "utilizador_id | nome <br />";

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

Husk til tilføjet use DB; efter navnerummet:

<?php

namespace App\Http\Controllers;

use DB;

Jeg har kun lavet Vis resultatkode for at vise alle resultater, men det er op til dig, hvordan du manipulerer dataene i din kode.

Testresultater

Tilfældige resultater af din mysql-sætning i MySQL-konsollen

Tilfældige resultater af din mysql-sætning i Laravel

Bemærk:

1- Jeg har selv løst dette spørgsmål for dig, men jeg stod over for et lille problem, og jeg fik input fra Kryptonit3 i Laracast-forum.

2- Du kan måske finde andre løsninger på dette spørgsmål, eller det kan løses på forskellige måder, men jeg har valgt at løse denne måde.

Det fulde spørgsmål og svar i note 1 kan findes her .




  1. Opdater tabel og tilføj data i en Laravel 5 Migration

  2. Generer auto-id i postgresql

  3. Fuzzy matching en streng i SQL

  4. Forskellen mellem INSERT og COPY