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

Bagaimana untuk Melaksanakan Carian Perkaitan Tertib Merentasi Berbilang Lajur dalam Laravel?

Mary-Kate Olsen
Lepaskan: 2024-11-05 18:26:02
asal
816 orang telah melayarinya

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

Mencari Berbilang Kata Kunci Berbanding Berbilang Lajur dengan Perkaitan Tertib dalam Laravel

Melaksanakan fungsi carian yang melibatkan berbilang kata kunci terhadap berbilang lajur pangkalan data boleh menjadi mencabar, terutamanya apabila keputusan perlu dipesan berdasarkan perkaitan. Dalam Laravel, terdapat beberapa pendekatan untuk menangani perkara ini.

Pendekatan menggunakan Pertanyaan Pangkalan Data

Salah satu cara untuk menangani isu ini ialah dengan membina berbilang pertanyaan pangkalan data untuk mendapatkan semula hasil berdasarkan kriteria tertentu. Berikut ialah pelaksanaan yang mungkin:

$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

Pendekatan ini menapis hasil berdasarkan kehadiran ketiga-tiga kata kunci, hanya dua kata kunci pertama dan kemudian hanya kata kunci pertama. Akhir sekali, ia menggabungkan hasil menggunakan pengendali kesatuan.

Pertimbangan Tambahan untuk Penomboran

Untuk melaksanakan fungsi muat-pada-tatal, anda boleh menggabungkan permintaan JavaScript dan AJAX. Apabila pengguna menatal ke bahagian bawah halaman, permintaan AJAX boleh dihantar untuk mendapatkan set keputusan seterusnya. Kaedah langkau() dan ambil() dalam Query Builder boleh digunakan untuk menentukan offset dan had rekod untuk diambil.

// Retrieve the specified number of results after the last loaded result
$start = $request->get('start');//how many results have already been shown

$records = Post::select('*')
                ->skip($start)
                ->take($this->rowperpage) // $this->rowperpage= 4 e.g.
                ->get();
Salin selepas log masuk

Ingat untuk mengendalikan kes di mana tiada lagi hasil yang tersedia untuk ditatal.

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

sumber:php.cn
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