Hatta eskisinden daha fazla kayıp - PHP döngü ile şaşkına [kapalı]

3 Cevap php

Tamam, ben bu soruya tavsiye izledi: http://stackoverflow.com/questions/1214176/stumped-in-the-middle-of-a-php-loop

Ama şimdi, ben daha önce daha fazla sorun yaşıyorum. İşte ben bugüne kadar ne var:

$sql = "SELECT section_name, category_name, result_level, url, winner FROM 2009_RKR_bestof INNER JOIN categories ON 2009_RKR_bestof.category = categories.category_id INNER JOIN sections ON 2009_RKR_bestof.section = sections.section_id ORDER BY section_name,category_name ASC";
$query = mysql_query($sql);

$current_section = "";
while ($stuff = mysql_fetch_array($query)) {
    if ($current_section == "") {
        $current_section = $stuff["section_name"];
        echo "<h3>$current_section</h3>";
        echo "<h4>$stuff[category_name]</h4>";
    }
    if ($current_section == $stuff["section_name"]) {
            //what the heck do i do here?

    } elseif ($current_section != $stuff["section_name"]) {
        $current_section = $stuff["section_name"];
        echo "<h3>$current_section</h3>";
    }
}

And my output is here: http://www.theroanoker.com/bestof/index1.php
By my old code, I had gotten this far: http://www.theroanoker.com/bestof/index2.php

Ben kafamı duvara yeniyorum. Birisi biraz daha bana rehberlik eder?

3 Cevap

Daha yavaş olsa da, ben bir kez döngü geçmek olmadığını anlamak ve şeyleri sıralamak için genellikle daha kolay olduğunu düşünüyorum. Yani, ilk geçişte bir şey yankı, ancak diziler bir çift oluşturmak, $ bölümler gibi = array () yok; ve $ kategoriler = array (); Eğer bakmak Sonra, $ kategoriler [$ şeyler ["category_name"]] = $ şeyler, ve bölüm için aynı gibi bir şey yapmak.

Sonra kategorileri ve bölümleri dizi boyunca ikinci bir döngü yapmak ve onları baskı

Caveat: $ şeyler bir var_dump ne de tablo yapısının bir bilgi ne ile, size geri alırsınız sonuçlarının doğasını sezmek zor. Biri için, sizin 'SECTION_NAME' sütununda - O dedi, ben senin katılır tekrarlanan bazı tablolar verilerle satır bir dizi üretecek düşünüyorum.

Öyleyse, o zaman doğru genel bir fikir sizin döngü ile var ise, sadece ekrana bir liste için bazı kod eklemeniz gerekir. Bu $ şeyler ["SECTION_NAME"] değişiklikler kadar çalışan iç içe bir döngü şeklinde olabilir. Sizin döngü o zaman olur:

$stuff = mysql_fetch_array($query);
while ($stuff) {
    echo "<h3>{$stuff['section_name']}</h3>";
    echo "<h4>{$stuff['category_name']}</h4>";

    $current_section = $stuff['section_name'];
    echo '<ul>';  //start list
    while ($current_section == $stuff['section_name'])  {
        echo '<li>'. /* Your data here */ .'</li>';

        $stuff = mysql_fetch_array($query);
    }
    echo '</ul>';
}

Daki sonuçlar, belirli bir "SECTION_NAME" içeren sonuçları Sonuçlar dizi bitişik olduğu şekilde sipariş takdirde Warning Yukarıdaki başarısız olur.

Ne zaman tarif ettik ve Verdiğin örneklere, Bu sizin için ne arıyorsanız eminim.

Bu sorgu ses üstleniyor ve size beklediğiniz sonuçları veriyor.

$sql = "SELECT section_name, category_name, result_level, url, winner 
        FROM 2009_RKR_bestof 
        INNER JOIN categories 
            ON 2009_RKR_bestof.category = categories.category_id 
        INNER JOIN sections 
            ON 2009_RKR_bestof.section = sections.section_id 
        ORDER BY section_name,category_name ASC";
$result = mysql_query($sql);
if (!$result) {
    echo mysql_error();
    exit;
}


$current_section = "";
$first_row = true;
while ($row = mysql_fetch_assoc($result)) { 
    if ($current_section != $row['section_name']) {
        // We don't want our closeing list tag the first run through the loop
        if (!$first_row) {
            echo '</ul>';
        }
        // We need to print our header row
        $current_section = $row['section_name'];
                echo "<h3>$current_section</h3>";
                echo "<h4>$row[category_name]</h4>";
        // And start our list
        echo '<ul>';
        // Ensure our next time we draw our heading, we draw the closing </ul> tag
        $first_row = false;
    }
    $link = '<li>';
    if (strlen($row['url'] > 0)) {
        $link .= '<a href="' . $row['url'] . '">' . $row['winner'] . '</a> (';
    } else {
        $link .= $row['winner'] . ' (';
    }
    switch ($row['result_level']) {
        case 1:
            $link .= 'Platinum';
        break;
        case 2:
            $link .= 'Gold';
        break;
        case 3: 
            $link .= 'Silver';
        break;
    }
    $link .= ')</li>';
    echo $link;
}