Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

PHP - Simple Nested Unordered List (UL) Array

Ini akan berhasil:

$result = mysql_query("SELECT * FROM News");
$topicname = '';

// open list of topics
echo '<ul>';

// loop through topics
while($row = mysql_fetch_array($result)) {
    if (!$row['TopicID']) {
        // fake topic name for unsorted stuff
        $row['TopicName'] = 'Sort Me';
    }
    if ($topicname != $row['TopicName']) {
        if($topicname != ''){
            // had a topic name, means we opened a list
            // that hasn't been closed, close it.
            echo '</ul>';
        }
        // print this topic and open the list of articles
        echo '<li>' . $row['TopicName'] . '</li><ul>';
        // update the current topic to be this TopicName
        $topicname = $row['TopicName']; 
    }
    // the news item
    echo '<li>' . $row['NewsID'] . '"</li>';
}
if($topicname != ''){
    // we saw at least one TopicName, we need to close
    // the last open list.
    echo '</ul>';
}
// end topic list
echo '</ul>';

Saya pikir masalah Anda yang sebenarnya adalah Anda membuka dua daftar setiap kali, tetapi hanya menutup satu (bahkan memindahkan blok terakhir di dalam daftar).

Untuk bagian kedua dari pertanyaan (baru) Anda:

Saya akan memperingatkan bahwa untuk daftar yang lebih besar (katakanlah, lebih dari 300 item) pengorbanan yang saya buat sehubungan dengan menyimpan daftar dalam memori dan mengulangi dua kali daripada hanya menanyakan jumlah yang diperlukan akan berayun ke arah lain. Yaitu, solusi di bawah ini menempatkan semuanya ke dalam memori, lalu mengulangi untuk kedua kalinya untuk mencetaknya; alternatifnya adalah menjalankan dua kueri, satu untuk menemukan jumlah TopicNames unik dan satu lagi untuk menemukan jumlah item total dalam daftar.

Juga, untuk tampilan, Anda benar-benar ingin menyelesaikan beberapa pengoptimalan untuk tata letak, saya akan melakukan ini secara naif dan hanya membuat (kira-kira) jumlah topik yang sama per kolom dan ketika pembagian tidak berhasil, ini akan berbobot ke kiri. Anda akan melihat di mana Anda dapat mengubah atau mengganti beberapa kode untuk mendapatkan hasil yang berbeda (dan lebih baik?).

$columns = // user specified;

$result = mysql_query("SELECT * FROM News");
$num_articles = 0;

// $dataset will contain array( 'Topic1' => array('News 1', 'News2'), ... )
$dataset = array();
while($row = mysql_fetch_array($result)) {
    if (!$row['TopicID']) {
        $row['TopicName'] = 'Sort Me';
    }
    $dataset[$row['TopicName']][] = $row['NewsID'];
    $num_articles++;
}

$num_topics = count($dataset);

// naive topics to column allocation
$topics_per_column = ceil($num_topics / $columns);

$i = 0; // keeps track of number of topics printed
$c = 1; // keeps track of columns printed
foreach($dataset as $topic => $items){
    if($i % $topics_per_columnn == 0){
        if($i > 0){
            echo '</ul></div>';
        }
        echo '<div class="Columns' . $columns . 'Group' . $c . '"><ul>';
        $c++;
    }
    echo '<li>' . $topic . '</li>';
    // this lists the articles under this topic
    echo '<ul>';
    foreach($items as $article){
        echo '<li>' . $article . '</li>';
    }
    echo '</ul>';
    $i++;
}
if($i > 0){
    // saw at least one topic, need to close the list.
    echo '</ul></div>';
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. menggunakan pernyataan LOAD mysql di PHP gagal, tetapi melakukannya melalui baris perintah berfungsi

  2. MySql memberikan izin pengguna

  3. Bagaimana cara mengelompokkan berdasarkan bulan dan mengembalikan nol jika tidak ada nilai untuk bulan tertentu?

  4. Kesalahan 1005 di MySQL (dari sintaks kunci asing?)

  5. Perluas kumpulan hasil GROUP BY dan HAVING