Laravel Eloquent: алфавитный порядок, но от маленьких слов до приговора - PullRequest
0 голосов
/ 18 июня 2019

У меня есть словарь (английский / арабский) с более чем 800 000 слов в моей базе данных MySQL. и я использую Laravel Project для управления этим. в панели поиска создать автозаполнение, но проблема в словаре у меня есть слова и предложения. например, в этом списке (Json API) значение OrderBy ASC в laravel Eloquent 5:

Acquaint with
Acquaintance
Acquire
Acquired
Acquisition

Но я хочу алфавитный порядок, но от Words до Sentences вот так, всегда означайте, что предложение сводится к словам:

Acquaintance
Acquire
Acquired
Acquisition
Acquaint with

Это мой код:

      $result = AutoComplete::select('Translation')
                            ->where('Translation', 'LIKE', $search. '%')
                            ->limit(4)
                            ->distinct()
                            ->orderBy('Translation', 'asc')
                            ->get();

Пожалуйста, предупредите меня, если код не оптимизирован :)

1 Ответ

0 голосов
/ 18 июня 2019

Я думаю, что это можно сделать с помощью двух отдельных запросов.

$words = AutoComplete::where('Translation', 'LIKE', "{$search}%")
    ->where('Translation', 'NOT LIKE', '% %')
    ->limit(5)
    ->distinct()
    ->orderBy('Translation')
    ->pluck('Translation');

$sentences = AutoComplete::where('Translation', 'LIKE', "{$search}%")
    ->where('Translation', 'LIKE', '% %')
    ->limit(5)
    ->distinct()
    ->orderBy('Translation')
    ->pluck('Translation');

$finalResults = $words->merge($sentences)->take(5);

Вы получаете из БД до 5 совпадающих слов и до 5 совпадающих предложений.

ПредполагаяВы хотите показать только 5 итоговых результатов, комбинируя их, вы получаете топ-5 совпадений упорядоченных слов перед предложениями.

...