Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

PHP - Mảng danh sách không có thứ tự (UL) lồng nhau đơn giản

Điều này sẽ thực hiện thủ thuật:

$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>';

Tôi nghĩ vấn đề thực sự của bạn là bạn đang mở hai danh sách mỗi lần, nhưng chỉ đóng một (thậm chí di chuyển khối cuối cùng bên trong danh sách).

Đối với phần thứ hai của câu hỏi (mới) của bạn:

Tôi sẽ lưu ý rằng đối với các danh sách lớn hơn (giả sử hơn 300 mục), sự cân bằng mà tôi đang thực hiện đối với việc lưu trữ danh sách trong bộ nhớ và lặp lại hai lần thay vì chỉ truy vấn số lượng cần thiết sẽ diễn ra theo cách khác. Đó là, giải pháp dưới đây đưa mọi thứ vào bộ nhớ, sau đó lặp lại lần thứ hai để in ra; giải pháp thay thế sẽ là chạy hai truy vấn, một để tìm số Chủ đề duy nhất và một để tìm tổng số mục trong danh sách.

Ngoài ra, đối với hiển thị, bạn thực sự muốn giải quyết một số tối ưu hóa cho bố cục, tôi sẽ làm điều này một cách ngây thơ và chỉ tạo (khoảng) số lượng chủ đề bằng nhau trên mỗi cột và khi việc phân chia không thành công, điều này sẽ nghiêng về bên trái. Bạn sẽ thấy nơi bạn có thể chỉnh sửa hoặc thay thế một số mã để nhận được các kết quả khác nhau (và tốt hơn?).

$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. Thay đổi cấu hình cơ sở dữ liệu CakePHP trên toàn cầu

  2. Nhận thẻ tệp mp4

  3. Tôi không hiểu tại sao biến của tôi là NULL

  4. Chỉ định vị trí trong xếp hạng (MySQL, PHP)

  5. Các vị trí gần nhất với vĩ độ và kinh độ