Rumah  >  Artikel  >  rangka kerja php  >  Bagaimana untuk mengalih keluar data pendua apabila melakukan pertanyaan penyertaan dalam thinkphp

Bagaimana untuk mengalih keluar data pendua apabila melakukan pertanyaan penyertaan dalam thinkphp

PHPz
PHPzasal
2023-04-11 09:16:101087semak imbas

Dalam rangka kerja ThinkPHP, kita selalunya perlu melakukan pertanyaan berkaitan berbilang jadual, antaranya pertanyaan sertai ialah kaedah biasa. Walau bagaimanapun, dalam pertanyaan berkaitan berbilang jadual, jika tiada pemprosesan dilakukan, data pendua mungkin berlaku. Artikel ini akan memperkenalkan cara mengalih keluar data pendua apabila melakukan pertanyaan penyertaan dalam ThinkPHP.

  1. Analisis Masalah

Apabila melakukan pertanyaan berkaitan berbilang jadual, kami biasanya menggunakan kod berikut:

$model = M('table1');
$data = $model->join('table2 ON table1.id=table2.table1_id')
              ->field('table1.*, table2.*')
              ->select();

Dalam kod di atas, kami menggunakan kaedah gabungan untuk melaksanakan pertanyaan berkaitan antara dua jadual, dan kemudian menggunakan kaedah medan untuk menentukan medan pertanyaan.

Walau bagaimanapun, memandangkan data dalam dua jadual diduakan, data pendua juga akan muncul dalam hasil pertanyaan. Sebagai contoh, hasil pertanyaan kami mungkin serupa dengan yang berikut:

id   | name  | age   | table1_id | content
-----------------------------------------
1    | John  | 20    | 1         | ...
2    | Mary  | 22    | 2         | ...
3    | John  | 20    | 3         | ...
4    | Bruce | 25    | 1         | ...
5    | Mary  | 22    | 5         | ...

Seperti yang anda lihat, terdapat dua keping data yang diduplikasi, iaitu dua keping data dengan ID 1 dan 3 . Ini kerana mereka Semua dikaitkan dengan data dalam jadual table2.

  1. Deduplikasi

Untuk mengalih keluar data pendua, kita boleh menggunakan kata kunci DISTINCT dalam MySQL, contohnya:

$model = M('table1');
$data = $model->distinct(true)
              ->join('table2 ON table1.id=table2.table1_id')
              ->field('table1.*, table2.*')
              ->select();

di atas Dalam kod tersebut, kami memanggil kaedah yang berbeza (benar), yang akan mengalih keluar data pendua daripada hasil carian, dengan itu memperoleh data unik yang kami inginkan.

Pada masa yang sama, kami juga boleh menggunakan kaedah kumpulan untuk mengalih keluar pendua. Contohnya:

$model = M('table1');
$data = $model->join('table2 ON table1.id=table2.table1_id')
              ->group('table1.id')
              ->field('table1.*, table2.*')
              ->select();

Dalam kod di atas, kami memanggil kaedah kumpulan('table1.id'), yang akan mengumpulkan hasil pertanyaan mengikut medan id dalam jadual table1 untuk mendapatkan data unik.

  1. Ringkasan

Artikel ini memperkenalkan cara mengalih keluar pendua apabila melakukan pertanyaan penyertaan dalam ThinkPHP, termasuk menggunakan kaedah yang berbeza dan kumpulan. Kaedah ini sangat biasa digunakan, terutamanya apabila melakukan pertanyaan berkaitan berbilang jadual yang kompleks. Pada masa yang sama, kita juga perlu ambil perhatian bahawa menggunakan kaedah ini memerlukan sejumlah masa dan sumber pengkomputeran.

Atas ialah kandungan terperinci Bagaimana untuk mengalih keluar data pendua apabila melakukan pertanyaan penyertaan dalam thinkphp. 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