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
Barbara Streisandasal
2024-11-05 21:55:02205semak imbas

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

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:
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