Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Melaksanakan Carian Tertib Berkaitan Merentas Berbilang Lajur dalam Laravel?

Bagaimana untuk Melaksanakan Carian Tertib Berkaitan Merentas Berbilang Lajur dalam Laravel?

Barbara Streisand
Lepaskan: 2024-11-05 21:55:02
asal
277 orang telah melayarinya

How to Implement a Relevance-Ordered Search Across Multiple Columns in Laravel?

Laravel: Cari dengan Berbilang Kata Kunci Berbanding Berbilang Lajur, Disusun mengikut Relevan

Masalah:

Laksanakan carian dalam Laravel yang mendapatkan semula data daripada berbilang lajur berdasarkan tiga kata kunci input. Hasil carian hendaklah disusun mengikut perkaitan, dengan baris yang mengandungi ketiga-tiga kata kunci berada pada kedudukan tertinggi, diikuti dengan baris yang mengandungi hanya dua kata kunci pertama dan akhirnya baris yang mengandungi hanya kata kunci pertama.

Penyelesaian:

Untuk mencari baris dalam susunan yang diingini, kami mulakan dengan membuat pertanyaan untuk siaran yang sepadan dengan ketiga-tiga kata kunci sama ada dalam lajur meta_name atau meta_description. Pertanyaan ini masuk ke dalam pembolehubah $all.

Seterusnya, kami membuat pertanyaan untuk siaran yang sepadan hanya dengan dua kata kunci pertama dalam lajur yang sama. Pertanyaan ini masuk ke dalam pembolehubah $twoWords dan kami mengecualikan ID siaran yang telah ditemui dalam $all.

Akhir sekali, kami membuat pertanyaan untuk siaran yang sepadan dengan kata kunci pertama sahaja dalam mana-mana lajur, sekali lagi tidak termasuk ID yang ditemui dalam $all dan $twords. Pertanyaan ini masuk ke dalam pembolehubah $oneWord.

Untuk mendapatkan hasil carian tertib terakhir, kami menggabungkan ketiga-tiga hasil pertanyaan ($semua, $twoWords, $oneWord) dan menetapkannya kepada pembolehubah $posts.

Kod untuk mendapatkan semula hasil carian adalah seperti berikut:

$word1 = 'word1';
$word2 = 'word2';
$word3 = 'word3';

$all = DB::table('posts')
    ->where('meta_name', 'like', "%{$word1}%")
    ->where('meta_name', 'like', "%{$word2}%")
    ->where('meta_name', 'like', "%{$word3}%")
    ->orWhere(function($query) use ($word1, $word2, $word3) {
        $query->where('meta_description', 'like', "%{$word1}%")
              ->where('meta_description', 'like', "%{$word2}%")
              ->where('meta_description', 'like', "%{$word3}%");
    });

$twoWords = DB::table('posts')
    ->where('meta_name', 'like', "%{$word1}%")
    ->where('meta_name', 'like', "%{$word2}%")
    ->orWhere(function($query) use ($word1, $word2) {
        $query->where('meta_description', 'like', "%{$word1}%")
              ->where('meta_description', 'like', "%{$word2}%");
    })
    ->whereNotIn('id', $all->pluck('id'));

$oneWord = DB::table('posts')
    ->where('meta_name', 'like', "%{$word1}%")
    ->orWhere('meta_description', 'like', "%{$word1}%")
    ->whereNotIn('id', $all->pluck('id'))
    ->whereNotIn('id', $twoWords->pluck('id'));

$posts = $all->union($twoWords)->union($oneWord)->get();
Salin selepas log masuk

Hasil carian kini disusun seperti berikut:

  1. Baris yang mengandungi ketiga-tiga kata kunci dalam meta_name atau meta_description
  2. Baris yang mengandungi hanya dua kata kunci pertama dalam meta_name atau meta_description
  3. Baris yang mengandungi hanya kata kunci pertama dalam meta_name atau meta_description

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Carian Tertib Berkaitan Merentas Berbilang Lajur dalam Laravel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan