Anda belum menunjukkan di kedua pertanyaan Anda apa tabel database itu, jadi saya tidak bisa menjawabnya secara spesifik, tetapi akan menguraikan saran saya.
Anda dapat menggunakan fungsi agregasi di mysql untuk mendapatkan entri berita Anda diurutkan dan dikelompokkan berdasarkan topik termasuk. hitungan mereka. Anda dapat melakukan dua kueri untuk mendapatkan penghitungan terlebih dahulu, itu sedikit tergantung pada bagaimana Anda ingin menangani data Anda.
Bagaimanapun, menggunakan mysql_...
fungsi, semua data yang Anda pilih dari database akan berada di memori (bahkan dua kali karena internal). Jadi memiliki array lain seperti pada pertanyaan Anda sebelumnya seharusnya tidak terlalu merugikan berkat optimasi copy on write di PHP. Hanya sedikit overhead yang efektif.
Di samping itu sebelum Anda mengurus keluaran aktual, Anda harus mendapatkan data Anda secara berurutan sehingga Anda tidak perlu mencampur penanganan data dan logika keluaran. Pencampuran memang membuat segalanya lebih rumit sehingga lebih sulit untuk dipecahkan. Misalnya jika Anda memasukkan output ke dalam fungsi sederhana, ini menjadi lebih mudah:
function render_list($title, array $entries)
{
echo '<ul><li>', $title, '<ul>';
foreach($entries as $entry)
{
echo '<li>', $entry['NewsID'], '</li>';
}
echo '</ul></li></ul>;
}
function render_column(array $topics)
{
echo '<div class="column">';
foreach($topics as $topic)
{
render_list($topic['title'], $topic['entries']);
}
echo '</div>';
}
Ini sudah menyelesaikan masalah keluaran Anda, jadi kami tidak perlu mempedulikannya lagi. Kita hanya perlu memperhatikan apa yang harus dimasukkan ke dalam fungsi-fungsi ini sebagai parameter.
Topik X per varian kolom:
Dengan varian ini, data harus berupa larik dengan satu topik per nilai, seperti yang Anda lakukan dengan pertanyaan sebelumnya. Saya akan mengatakan itu sudah terpecahkan. Tidak tahu masalah konkret mana yang Anda miliki dengan jumlah kolom, perhitungannya terlihat bagus, jadi saya lewati sampai Anda memberikan informasi konkret tentangnya. "Tidak berfungsi" tidak memenuhi syarat.
X item berita per varian kolom:
Ini lebih menarik. Langkah mudah di sini adalah melanjutkan topik sebelumnya dengan kolom berikutnya dengan menambahkan judul topik lagi. Sesuatu seperti:
Topic A Topic A Topic B
- A-1 - A-5 - B-4
- A-2 Topic B - B-5
- A-3 - B-1 - B-6
- A-4 - B-2
- B-3
Untuk mencapai ini, Anda perlu memproses data Anda sedikit berbeda, yaitu berdasarkan jumlah item (berita).
Katakanlah Anda berhasil mengambil data yang dikelompokkan (dan karena itu diurutkan) dari database Anda:
SELECT TopicName, NewsID FROM news GROUP BY 1;
Anda kemudian dapat mengulangi semua baris yang dikembalikan dan membuat kolom Anda, akhirnya menampilkannya (sudah diselesaikan):
$itemsPerColumn = 4;
// get columns
$topics = array();
$items = 0;
$lastTopic = NULL;
foreach ($rows as $row)
{
if ($lastTopic != $row['TopicName'])
{
$topic = array('title' => $row['TopicName']);
$topics[] = &$topic;
}
$topic['entries'][] = $row;
$items++;
if ($items === $itemsPerColumn)
{
$columns[] = $topics;
$topics = array();
$lastTopic = NULL;
}
}
// output
foreach($columns as $column)
{
render_column($column);
}
Jadi ini sebenarnya sebanding dengan jawaban sebelumnya, tetapi kali ini Anda tidak perlu mengatur ulang array untuk mendapatkan berita yang diurutkan berdasarkan topik mereka karena kueri basis data sudah melakukan ini (Anda bisa melakukannya untuk jawaban sebelumnya juga ).
Kemudian lagi itu sama:Iterasi atas kumpulan hasil yang dikembalikan dan membawa data ke dalam struktur yang dapat Anda hasilkan. Masukan, Pemrosesan, Keluaran. Selalu sama.
Semoga bermanfaat.