#php #laravel
#php #laravel
Вопрос:
Я хочу взять последнюю строку таблицы, используя orderby. Результаты:
{"anime":[{"id":25,"title":"Black Clover","epnumber":14},
{"id":25,"title":"Black Clover","epnumber":13},
{"id":25,"title":"Black Clover","epnumber":12},
{"id":25,"title":"Black Clover","epnumber":11},
{"id":25,"title":"Black Clover","epnumber":10},
{"id":26,"title":"One Piece","epnumber":200},
{"id":26,"title":"One Piece","epnumber":199}]}
Но я на самом деле хочу.
{"anime":[{"id":25,"title":"Black Clover","epnumber":14}{"id":26,"title":"One Piece","epnumber":200}]}
Мой код:
$anime = DB::table('seasons')->orderBy('episodes.epnumber', 'desc')
->join('animes','animes.id','seasons.animes_id')
->join('episodes','episodes.seasons_id','seasons.id')
->get(['animes.id', 'animes.title', 'episodes.epnumber'])->toArray();
Комментарии:
1. вы можете включить предложение limit или просто взять первую запись возвращаемого массива
Ответ №1:
Вы можете просто сгруппировать данные и получить МАКСИМАЛЬНЫЙ номер эпизода:
$anime = DB::table('seasons')->orderBy('episodes.epnumber', 'desc')
->join('animes','animes.id','seasons.animes_id')
->join('episodes','episodes.seasons_id','seasons.id')
->groupBy('animes.id', 'animes.title')
->get(['animes.id', 'animes.title', DB::raw('MAX(episodes.epnumber) as epnumber')])->toArray();
Комментарии:
1. Да, я решил свою проблему. Спасибо. И мне нужно использовать «как», вот и все. DB::raw(‘MAX(episodes.dugaar) как epnumber’)
Ответ №2:
вы можете использовать функцию (take()):
$anime = DB::table('seasons')->orderBy('episodes.epnumber', 'desc')
->join('animes','animes.id','seasons.animes_id')
->join('episodes','episodes.seasons_id','seasons.id')
->get(['animes.id', 'animes.title', 'episodes.epnumber'])->take(1)->toArray();
или только первую:
$anime = DB::table('seasons')->orderBy('episodes.epnumber', 'desc')
->join('animes','animes.id','seasons.animes_id')
->join('episodes','episodes.seasons_id','seasons.id')->select(['animes.id', 'animes.title', 'episodes.epnumber'])->first();
Комментарии:
1. Если я использую first() или take(1) . Он покажет только одни данные.