Saya mempunyai jadual MySQL dengan lajur lokasi wilayah dan latitud/longitud. Setiap kawasan mempunyai banyak lokasi, seperti20.000
。有没有办法只选择几个,比如100
, yang kelihatan sekata pada peta?
Pengedaran tidak semestinya sempurna, kelajuan pertanyaan adalah lebih penting. Jika ini tidak dapat dilakukan menggunakan MySQL secara langsung, algoritma yang sangat pantas boleh digunakan untuk memilih lokasi teragih sama rata.
Terima kasih terlebih dahulu.
EDIT: Menjawab beberapa permintaan dalam ulasan. Data tidak mempunyai apa-apa untuk digunakan, ia hanya koordinat kawasan dan lokasi, sebagai contoh:
+-------+--------------+----------+-----------+------------+--------+--------+ | id | area | postcode | lat | lon | colour | size | +-------+--------------+----------+-----------+------------+--------+--------+ | 16895 | Athens | 10431 | 37.983917 | 23.7293599 | red | big | | 16995 | Athens | 11523 | 37.883917 | 23.8293599 | green | medium | | 16996 | Athens | 10432 | 37.783917 | 23.7293599 | yellow | small | | 17000 | Thessaloniki | 54453 | 40.783917 | 22.7293599 | green | small | +-------+--------------+----------+-----------+------------+--------+--------+
Terdapat juga beberapa lajur dengan ciri, tetapi ini hanya digunakan untuk penapisan.
Saya cuba mendapatkan kedua-dua barisnth
dan nampaknya berkesan, walaupun agak perlahan
SET @a = 0; select * from `locations` where (@a := @a + 1) % 200 = 0
Menggunakanrandom()
juga berfungsi, tetapi ia agak perlahan.
EDIT 2: Ternyata menambah kod zip pada borang adalah mudah. Dengan ini, pengumpulan mengikut kod zip nampaknya memberikan hasil yang menggembirakan. Satu-satunya masalah ialah, terdapat kawasan yang sangat besar, sekitar 3000 poskod yang berbeza, dan hanya mendapat 100 daripadanya mungkin berakhir dengan banyak daripadanya muncul di satu tempat, jadi yang mungkin memerlukan pemprosesan lanjut dalam PHP.
Edit3, jawab soalan @RickJames dalam ulasan supaya mereka berada di satu tempat:
AUTO_INCRMENT
id dan mungkin ada jurang1000
,我们希望仅显示随机的100
。如果1000
atau kurang, kita boleh tunjukkan semuanya
Ini adalah carayang bolehmemenuhi matlamat anda.
Bagi "pendua", anggap ini sebagai cara kasar untuk melihat dua item jatuh ke tempat yang sama:
"5" dan "3" boleh dilaraskan ke atas (atau ke bawah) untuk mengekalkan lebih banyak (atau kurang) id. Oleh kerana susunan latitud/longitud, "5" dan "3" adalah berbeza; (Gunakan jumlah yang sama berhampiran khatulistiwa, gunakan catuan yang lebih besar di latitud yang lebih tinggi.)
Ada kecacatan kecil...dua item yang sangat rapat mungkin melintasi sempadan yang dicipta oleh
ROUNDs
.Berapa banyak baris jadual asal? Berapakah bilangan baris yang dijana oleh pertanyaan di atas? (
SELECT COUNT(*) FROM ( ... ) x;
)