Menggabungkan operasi UNION dan LIMIT dalam MySQL mengehadkan bilangan hasil bagi setiap syarikat
Matlamatnya adalah untuk mendapatkan 20 pekerjaan yang sepadan dengan kriteria khusus daripada dua syarikat tertentu, sambil mengehadkan bilangan keputusan kepada maksimum 10 setiap syarikat. Masalah dihadapi apabila menggunakan UNION DISTINCT dan LIMIT kerana yang terakhir mempengaruhi keseluruhan set keputusan dan bukannya set keputusan individu untuk setiap syarikat.
Penyelesaian berikut menyelesaikan isu ini:
<code class="language-sql">((SELECT c.name, j.title, j.`desc`, j.link FROM jobs_job j INNER JOIN companies_company c ON j.company_id = c.id WHERE c.name IN ('Company1') ORDER by name, title LIMIT 0, 10) UNION (SELECT c.name, j.title, j.`desc`, j.link FROM jobs_job j INNER JOIN companies_company c ON j.company_id = c.id WHERE c.name IN ('Company2') ORDER by name, title LIMIT 0, 10)) ORDER BY name;</code>
Tweak utama adalah untuk menyusun klausa LIMIT dalam pernyataan SELECT individu dan bukannya menggunakannya pada set hasil gabungan. Ini memastikan keputusan dihadkan kepada maksimum 10 bagi setiap syarikat. Kami kemudian menggunakan penyataan ORDER BY luar yang lain untuk mengisih hasil gabungan akhir yang ditetapkan mengikut nama syarikat.
Ingat bahawa MySQL menggunakan ORDER BY selepas UNION, jadi satu lagi ORDER BY diperlukan untuk mengisih set hasil gabungan.
Atas ialah kandungan terperinci Bagaimana untuk Mengehadkan Keputusan Setiap Syarikat Apabila Menggunakan UNION dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!