Порядок по регистру с разными значениями столбцов в Laravel не работает

Порядок по регистру с разными значениями столбцов в Laravel не работает

27.01.2020 12:49:31 Просмотров 31 Источник

Я пытаюсь построить запрос Laravel, который должен упорядочивать значения по большему количеству столбцов:

прежде всего, по часам и это работает, а также по значениям в столбце с именем "competition_type" таким образом:

  1. "АТП-ОДИНОЧКИ"
  2. "WTA-ОДИНОЧКИ"
  3. "ЧЕЛЛЕНДЖЕР МУЖЧИНЫ-ОДИНОЧКИ"
  4. "ЧЕЛЛЕНДЖЕР - ЖЕНЩИНЫ-ОДИНОЧКИ"
  5. "ITF МУЖЧИНЫ-ОДИНОЧКИ"
  6. ЖЕНЩИНЫ ИТФ - ОДИНОЧЕК

Я попробовал этот запрос, но он работает...Я попробовал несколько подходов, и это мой последний:

$matches = Match::select()
           ->where('date', $date)->where('pick_score', '<>', '0');

$matches = Match::where('date', $date)
           ->where('pick_score', '<>', '0');

$matches = Match::select("CASE 
           WHEN competition_type like '%ATP - SINGLES%' then 1
           WHEN competition_type like '%WTA - SINGLES%' then 2 
           WHEN competition_type like '%CHALLENGER MEN - SINGLES%' then 3
           WHEN competition_type like '%CHALLENGER WOMEN - SINGLES%' then 4
           WHEN competition_type  '%ITF MEN - SINGLES%' then 5
           WHEN competition_type = '%ITF WOMEN - SINGLES%' then 6 
           END DESC")
           ->select('matches.*');

Дело в том, что если я добавляю "order by" перед делом, это дает мне ошибку. Как я должен изменить свой запрос, чтобы получить значения столбцов так, как я упомянул?

У вопроса есть решение - Посмотреть?

Ответы - Порядок по регистру с разными значениями столбцов в Laravel не работает / Order by CASE with different column values in Laravel does not work

Является ответом!
IGP

27.01.2020 05:30:34

Вы должны использовать selectRaw для такого рода запросов.

$matches = Match::selectRaw('CASE
    WHEN competition_type LIKE "%ATP - SINGLES%" THEN 1
    WHEN competition_type LIKE "%WTA - SINGLES%" THEN 2
    WHEN competition_type LIKE "%CHALLENGER MEN - SINGLES%" THEN 3
    WHEN competition_type LIKE "%CHALLENGER WOMEN - SINGLES%" THEN 4
    WHEN competition_type LIKE "%ITF MEN - SINGLES%" THEN 5
    WHEN competition_type LIKE "%ITF WOMEN - SINGLES%" THEN 6
    END
AS type_number')
->orderBy('type_number', 'asc')
->get();

Или, может быть, вы хотите использовать ORDER BY CASE? В этой ситуации, возможно, вам следует попробовать orderByRaw

https://stackoverflow.com/questions/59923058/order-by-case-with-different-column-values-in-laravel-does-not-work/59924605#comment106000281_59924605
спасибо, это сработало !
Помочь в развитии проекта:
Закрыть X