2009-07-31 2 views
0

Ладно, так что я последовал совету по этому вопросу: Stumped in the middle of a PHP loopЕще больше потеряли, чем раньше - тупик с PHP петли

Но теперь у меня еще больше проблем, чем раньше. Вот то, что я до сих пор:

$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>"; 
    } 
} 

И мой выход здесь: http://www.theroanoker.com/bestof/index1.php
мой старый код, я получил это далеко: http://www.theroanoker.com/bestof/index2.php

Я бить головой о стену. Может ли кто-нибудь направить меня немного больше?

+2

Возможно, вам стоит задать свой вопрос на форуме, где вы сможете получить лучшую (интерактивную) помощь? Формат SO более нацелен на одностороннее Q & A. Я могу порекомендовать Sitepoint для вопросов, связанных с PHP: http://www.sitepoint.com/forums/forumdisplay.php?f=34 – troelskn

+0

Можете ли вы сделать 'var_dump' на' $ stuff', чтобы я мог видеть, что вы работаете с? –

+1

Можете ли вы объяснить, что вы пытаетесь сделать? – Dirk

ответ

1

Несмотря на то, что он медленнее, я думаю, что его легче понять, если вы пройдете через цикл один раз и разобрались. Итак, не эхо ничего на первом проходе, но создайте пару массивов, например $ sections = array(); и $ categories = array(); Затем, когда вы просматриваете, сделайте что-то вроде $ categories [$ stuff ["category_name"]] = $ stuff, и то же самое для раздела.

Затем сделайте вторую петлю через категории и секции массива и распечатать их

1

РИСКОВАННАЯ: ни с более var_dump долл вещи, ни знания о структуре таблиц, сложно интуитивно понять природу результатов вы вернетесь. Тем не менее, я думаю, что ваши соединения создадут последовательность строк с данными из повторяющихся таблиц - столбец «section_name» для одного.

Если да, то у вас есть правильная общая идея с вашим циклом, вам просто нужно добавить код для вывода списка. Это может иметь форму вложенного цикла, который выполняется до тех пор, пока не изменится значение $ stuff ["section_name"]. Ваш цикл становится:

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

Предупреждение выше терпит неудачу, если ваши результаты не упорядочены таким образом, что все результаты, содержащие данное «SECTION_NAME» являются смежными в массиве результатов.

0

Из того, что вы описали, и примеров, которые вы указали, я уверен, что это то, что вы ищете.

Предполагается, что ваш запрос будет звуковым и даст вам ожидаемые результаты.

$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; 
} 
Смежные вопросы