반응형
라라벨: 어디에 있는지 순서
일부 콘텐츠를 쿼리하기 위해 스핑크스 검색을 사용하고 있으며 MySQL로 쿼리할 개체의 ID를 가지고 있습니다.스핑크스가 주는 순위에 따라 내 아이디 배열이 정렬됩니다.따라서 다음과 같은 MySQL을 만들고 싶습니다.
SELECT * FROM table WHERE id IN (1,17,2)
ORDER BY FIELD(id,1,17,2)
제가 할 수 있다는 것을 압니다.
Table::whereIn('id', $ids)->get();
하지만 제가 주문한 것을 받을 수 없습니다.
어떻게 하면 라라벨과 함께 제대로 할 수 있을까요?
솔루션:
$ids = array(1,17,2);
$ids_ordered = implode(',', $ids);
$items = static::whereIn('id', $ids)
->orderByRaw("FIELD(id, $ids_ordered)")
->get();
추가 참고 사항:
WHERE IN 절에 있는 ID의 현재 순서에 따라 모든 항목을 한 번에 주문하기라는 제목의 기사에 있는 솔루션을 사용하여 다음과 같이 설명합니다.
WHERE IN 절에서 제공한 배열의 ID 순서를 사용하여 데이터베이스에서 항목을 정렬할 때 유용합니다.사용할 다른 ID 순서를 제공하는 등 사용자의 요구에 맞게 쉽게 수정할 수 있습니다.
// Raw SQL:
// SELECT * FROM items WHERE id IN (1,2,3,4,5) ORDER BY FIELD(id,1,2,3,4,5);
$itemIds = array(1,2,3,4,5);
$ids = implode(',', $itemIds);
$items = static::whereIn('id', $itemIds)
->orderByRaw(DB::raw("FIELD(id, $ids)"))
->take($limit)
->get();
저도 이 문제가 있었지만, 제 목표 배열 요소는 문자열이었습니다.이 경우에는...
$strings = array('xxx','yyy','zzz');
$imploded_strings = implode("','", $strings);
$items = static::whereIn('some_column', $strings)
->orderByRaw(DB::raw("FIELD(some_column, '$imploded_strings')"))
->get();
$category_id = Category::select('id')->orderby('name','ASC')->get()->pluck('id')->toArray();
언급URL : https://stackoverflow.com/questions/26704575/laravel-order-by-where-in
반응형
'programing' 카테고리의 다른 글
Python MySQL IN 절에 사용할 목록을 압축하는 중 (0) | 2023.08.19 |
---|---|
ProgressDialog는 더 이상 사용되지 않습니다.대체 사용할 수 있는 것은 무엇입니까? (0) | 2023.08.19 |
Oracle plsql 블록에서 한 줄로 여러 변수를 선언하는 방법 (0) | 2023.08.19 |
마우스 오버 이벤트와 마우스 입력 이벤트의 차이점은 무엇입니까? (0) | 2023.08.19 |
꺼내기 요청 중 분기 이름 변경 (0) | 2023.08.19 |