Rumah > Soal Jawab > teks badan
Saya ada soalan, ia berfungsi dengan baik. Dalam langkah terakhir, saya mahu ia mengisih keseluruhan jadual DESC berdasarkan bilangan item dalam lajur "Senarai Item", tetapi ia tidak berfungsi.
SELECT t8.username AS 'Username', GROUP_CONCAT(CASE WHEN t1.dup=1 AND t2.stat=0 AND t5.item_name='lamp' THEN item_id END ORDER BY item_id SEPARATOR ', ') `My Item List`, GROUP_CONCAT(CASE WHEN t2.dup=1 AND t1.stat=0 AND t5.item_name='lamp' THEN item_id END ORDER BY item_id SEPARATOR ', ') `Item List` FROM table1 t1 LEFT JOIN table3 t2 USING (item_id) JOIN table2 t5 ON t5.id = t2.user_id JOIN accounts t8 ON t8.id = t2.user_id WHERE t1.user_id = 23 AND t2.user_id <> 23 GROUP BY t2.user_id HAVING `Item List` is not null or `My Item List` is not null ORDER BY COUNT('Item List') DESC;
Saya pasti saya sudah sejuk, tetapi saya masih kehilangan sesuatu.
item_id disimpan dalam table2 sebagai int(11) dan kemudian dihantar sebagai kunci asing ke table3.
Ini adalah hasil yang saya dapat melalui COUNT:
Ini adalah panjang yang saya dapat:
Terima kasih!
P粉3561286762023-09-07 14:33:59
Jika anda mahu hasil senarai item mengikut panjang, hasilnya kelihatan seperti di bawah
Senarai Item Senarai Saya Kosong 6,7,8,9,10,12,13,14,15,16,17,20,371 Kosong 20,21,22,23,24,25 Kosong 6,7,8,9,10 Kosong 131 Kosong 131 1,4,5 kosong
Cuba pertanyaan berikut
SELECT t8.username AS 'Username', GROUP_CONCAT(CASE WHEN t1.dup=1 AND t2.stat=0 AND t5.item_name='lamp' THEN item_id END ORDER BY item_id SEPARATOR ', ') `My Item List`, GROUP_CONCAT(CASE WHEN t2.dup=1 AND t1.stat=0 AND t5.item_name='lamp' THEN item_id END ORDER BY item_id SEPARATOR ', ') `Item List` FROM table1 t1 LEFT JOIN table3 t2 USING (item_id) JOIN table2 t5 ON t5.id = t2.user_id JOIN accounts t8 ON t8.id = t2.user_id WHERE t1.user_id = 23 AND t2.user_id <> 23 GROUP BY t2.user_id HAVING `Item List` is not null or `My Item List` is not null ORDER BY LEN('Item List') DESC;
P粉6688042282023-09-07 12:59:57
Kita boleh menggunakan kiraan unsur dalam group_concat
相同的条件的 sum
来计算 Item List
yang sepadan seperti berikut:
SELECT t8.username AS 'Username', GROUP_CONCAT(CASE WHEN t1.dup=1 AND t2.stat=0 AND t5.item_name='lamp' THEN item_id END ORDER BY item_id SEPARATOR ', ') `My Item List`, GROUP_CONCAT(CASE WHEN t2.dup=1 AND t1.stat=0 AND t5.item_name='lamp' THEN item_id END ORDER BY item_id SEPARATOR ', ') `Item List` FROM table1 t1 ... ORDER BY SUM(CASE WHEN t2.dup=1 AND t1.stat=0 AND t5.item_name='lamp' THEN 1 ELSE 0 END) DESC
Ini lebih selamat daripada hanya membandingkan panjang rentetan yang terhasil: contohnya, mengandungi satu nombor besar seperti '10000'
)的项目列表仍然比 '1 长, 2'
yang mengandungi dua item
Jika kita menggunakan fungsi rentetan, kita boleh mengira bilangan koma yang muncul dalam rentetan:
ORDER BY LENGTH(`Item List`) - LENGTH(REPLACE(`Item List`, ', ', '')) DESC
Nota sampingan: Dua pengguna mungkin mempunyai bilangan item yang sama dalam senarai mereka, jadi mungkin idea yang baik untuk menambah satu lagi kriteria pengisihan untuk memecahkan potensi seri.