Laravel雄辩:按字母顺序排列,但从小词到句子

时间:2019-06-18 20:22:38

标签: mysql laravel sorting eloquent sql-order-by

我的MySQL数据库中有(英语/阿拉伯语)字典,超过80万个单词。我使用Laravel Project进行管理。在搜索栏中创建自动完成,但字典中的问题我有单词和句子。例如,在此列表中(Json API)在laravel Eloquent 5中为OrderBy ASC

Acquaint with
Acquaintance
Acquire
Acquired
Acquisition

但是我想要按字母顺序排列,但是要像这样从WordsSentences,总是表示句子是单词:

Acquaintance
Acquire
Acquired
Acquisition
Acquaint with

我的代码:

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

如果代码未优化,也请提醒我:)

1 个答案:

答案 0 :(得分:0)

我认为可以使用两个单独的查询来完成此操作。

$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个符合条件的单词。