首页 > 解决方案 > Laravel Eloquent:字母顺序,但从小词到句子

问题描述

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

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();

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

标签: mysqllaravelsortingeloquentsql-order-by

解决方案


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

$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 个匹配有序单词。


推荐阅读