Ralat MySQL: betulkan isu "operand harus mengandungi 1 lajur"
Dalam pertanyaan MySQL anda, anda mengalami ralat "Operand harus mengandungi 1 lajur". Ralat ini biasanya berlaku apabila subkueri mengembalikan berbilang lajur, tetapi pertanyaan luar hanya menjangkakan satu lajur di lokasi tersebut.
Ralat pemahaman:
Pertanyaan ralat mengandungi subkueri:
<code class="language-sql">(SELECT users.username AS posted_by, users.id AS posted_by_id FROM users WHERE users.id = posts.posted_by)</code>
Subkueri ini mendapatkan semula dua lajur, "disiarkan_oleh" dan "disiarkan_oleh_id". Walau bagaimanapun, anda menggunakan subkueri ini sebagai satu lajur dalam pertanyaan luar:
<code class="language-sql">COUNT( posts.solved_post ) AS solved_post, (SUBQUERY)</code>
Ketidakkonsistenan ini mengakibatkan ralat "operand harus mengandungi 1 lajur" kerana pertanyaan luar menjangkakan satu lajur di lokasi ini.
Penyelesaian:
Kaedah 1: Gunakan sambungan jadual
Untuk menyelesaikan masalah ini, pertimbangkan untuk menyertai jadual "pengguna" secara langsung dan bukannya menggunakan subkueri. Ini akan membolehkan anda memilih secara eksplisit lajur "posted_by" dan "posted_by_id" tanpa melanggar kekangan lajur tunggal.
<code class="language-sql">SELECT topics.id, topics.name, topics.post_count, topics.view_count, COUNT( posts.solved_post ) AS solved_post, users.username AS posted_by, users.id AS posted_by_id FROM topics LEFT OUTER JOIN posts ON posts.topic_id = topics.id LEFT OUTER JOIN users ON users.id = posts.posted_by WHERE topics.cat_id = :cat GROUP BY topics.id</code>
Kaedah 2: Pilih satu lajur daripada subkueri
Sebagai alternatif, jika anda berkeras untuk menggunakan subkueri, anda boleh mengubah suainya untuk hanya mengembalikan lajur yang diperlukan. Sebagai contoh, anda boleh mendapatkan hanya lajur "disiarkan_oleh":
<code class="language-sql">(SELECT users.username AS posted_by FROM users WHERE users.id = posts.posted_by)</code>
Dengan memilih satu lajur dalam subkueri, anda memastikan ia memenuhi keperluan lajur tunggal pertanyaan luar.
Atas ialah kandungan terperinci Mengapa Pertanyaan MySQL Saya Mengembalikan Ralat 'Operand harus mengandungi 1 lajur'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!