PHP / MySQL Отображение списка результатов - PullRequest
1 голос
/ 20 декабря 2011

Мне нужна помощь для отображения моих результатов в PHP.Ниже показано, что отображается для моего запроса:

SELECT service_names.id, service_names.name as service, service_titles.name 
as title,  user_id  FROM `service_names` INNER JOIN service_titles ON title_id 
= service_titles.id

enter image description here

При таком дизайне мне нужно отображать результаты примерно так:

<div class="list">
    <h3 class="secondary">Maintenance</h3>
        <ul>
            <li>Wiper Blades</li>
            <li>Air Filter</li>
            <li>Cabin Filter</li>
            <li>Fuel Filter</li>
            <li>Cooling System</li>
            <li>Brake System</li>
            <li>Fuel System</li>
            <li>Trans Fluid Exchange</li>
        </ul>
</div>
<div class="list">
    <h3 class="secondary">Tire Services</h3>
       <ul>
            <li>Tire Rotation</li>
            <li>Flat Repair</li>
            <li>Wheel Balance</li>
            <li>Wheel Alignment</li>
        </ul>
</div>

Вот моя ветка , которую я разместил ранее, которая объясняет мой дизайн базы данных и показывает изображение того, как она должна выглядеть.Так что в основном у меня есть дизайн базы данных, но теперь я не слишком уверен, как создать запрос, чтобы просмотреть все результаты и сохранить его в указанном выше HTML-формате.

Если бы кто-нибудь мог мне помочь, я быочень ценю это.

Спасибо!

Ответы [ 3 ]

4 голосов
/ 20 декабря 2011

Я думаю, что-то подобное должно сработать, когда вы создаете массив для каждого «заголовка», который содержит все элементы «service» под этим заголовком ... затем вы просто просматриваете каждый из массивов «title»чтобы сгенерировать маркеры:

$query=mysql_query('',[DB_CONNECTION]);
if (!$query){
    //do something  
}
if (!mysql_num_rows($query)){
    //do something for no results   
}

$result_array = array();

while($r=mysql_fetch_array($query)){
    if (!isset($result_array[$r['title']])){
        $result_array[$r['title']] = array();
    }
    $result_array[$r['title']][] = $r['service'];
}

$html = "";
foreach($result_array as $key => $value){
    $html .= "
    <div class=\"list\">
        <h3 class=\"secondary\">$key</h3>
            <ul>";
        foreach($result_array[$key] as $service){
            $html .= "<li>$service</li>\n"; 
        }
    $html .= "</ul></div>";
}

echo $html;

Это структурировано, поэтому будет работать с таким количеством типов заголовков, как у вас.(Очевидно, что вам нужно поместить в sql и соединение в mysql_query () в верхней части.

2 голосов
/ 20 декабря 2011

Лично я бы разработал базу данных по-другому и поместил бы title в отдельную таблицу, но с тем, что у вас есть, вы можете легко отсортировать по title и отслеживать текущую.При смене названия вам нужно начать новый список.

Что-то вроде (псевдо-код):

sql:

SELECT service_names.id, service_names.name as service, service_titles.name as title,  user_id  FROM `service_names` INNER JOIN service_titles ON title_id = service_titles.id ORDER BY `service_names`.`name`

php

$old_title = '';
$title = '';
// start list
foreach ($row = mysql....)
{
  $title = $row['title'];
  if ($title != $old_title)
  {
    // end list
    // start list
    $old_title = $title;
  }
  // add list item
}
// end list
1 голос
/ 20 декабря 2011

Это может помочь.

Вам просто нужно сохранить старую категорию, чтобы сравнить с новой. (Здесь предполагается, что вы заказали записи в соответствии с категорией, что легко можно сделать с помощью ORDER BY)

$oldCat ="";
while($newRow = mysql_fetch_row()){
    if($oldCat!=$newRow["title"]) {
        echo '<h3 class="secondary">'. $newRow["title"] . '</h3>';
        echo "<ul>";
    }
    echo '<li>'.$newRow["service"].'</li>';

    if($oldCat!=$newRow["title"]) {
        echo "</ul>";
        $oldCat= $newRow["title"];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...