MySQL и PHP - для каждого? - PullRequest
       5

MySQL и PHP - для каждого?

1 голос
/ 11 октября 2010

У меня есть следующий код:

SELECT q21, q21coding  AS Description FROM `tresults_acme` WHERE q21 IS NOT NULL AND q21 <> '' ORDER BY q21coding

Возвращает следующее (отрывок):

Text                                                     Description
Lack of up to date equal pay cases&legislation - t... Content needs updating
The intranet could contain more "up to date traini... Content needs updating
Poorly set out. It is hard to find things.            Difficulty in navigating/finding content
Only use the intranet as a necessity. Will ask my ... Difficulty in navigating/finding content

Теперь я хотел бы отобразить это в виде таблицы на странице PHP, но у меня возникли некоторые проблемы из-за способа отображения, который должен отображаться следующим образом:

Content needs updating
----------------------
[List all the comments relating to this description]

Difficulty in navigating/finding content
----------------------------------------
[List all the comments relating to this description]

и т. Д.

Теперь я думаю, что это цикл For Each в PHP, но мне очень трудно разобраться с этим - любые идеи и предложения приветствуются!

Спасибо

Ответы [ 3 ]

2 голосов
/ 11 октября 2010

Простой подход

  1. Установите prev_desc на NULL
  2. Для каждой строки выведите text
  3. Если description не равен prev_desc, добавьте описание нового «раздела» и задайте prev_desc <- description

Например: 1 (не проверено!),

$prev_desc = null;
while ($row = mysql_fetch_assoc(...)) {
    if ($prev_desc != $row['description']) {
        print '<h1>' . $row['description'] . '</h1>';
        $prev_desc = $row['description'];
    }
    print $row['text'] . '<br />'; // Formatting needed
}

Примечание : Вы должны оставить ORDER BY <description-column>, чтобы строки были "сгруппированы". В противном случае этот простой подход не будет работать.

Менее подход к презентации

Меня можно считать более "чистым", чтобы создать некий 2D-контейнер для "категоризации" извлеченных данных, например,

$items = array(
    'Content needs updating' => array(
        'Lack of ...',
        'The intra...'
    ),
    ...
);

Затем вы можете зациклить эти элементы, например, 1 :

foreach ($items as $desc => $texts) {
    print '<h1>' . $desc . '</h1>';
    foreach ($texts as $text) {
        print $text . '<br />';
    }
}

1 Как заметил @bobince, убедитесь, что контент, поступающий непосредственно в окончательный HTML, правильно экранирован, см., Например. htmlspecialchars().

0 голосов
/ 11 октября 2010

вы можете создать несколько запросов для каждого из разделов или выполнить циклическое повторение данных несколько раз и выполнить фильтрацию по типу описания с помощью php.

$descriptions = array('Content needs updating','Difficulty in navigating/finding content');
$rows = <fetch all rows from the query>;
foreach($descriptions as $description)
{
    echo '<h1>',$description,'</h1>';
    foreach($rows as $row)
    {
        if ($row['description'] == $description)
        {
            echo $row['text'],'<br />';
        }
    }
}
0 голосов
/ 11 октября 2010

Вам просто нужно отслеживать, какой заголовок вы в последний раз отображали.Я не знаю, какую библиотеку вы используете для доступа к базе данных, поэтому детали того, как вы обращаетесь к столбцам / строкам, будут немного отличаться, но здесь это в виде псевдокода:имеет добавленную возможность помещать комментарии в <ul>, не уверен, требуется ли это для вас или нет.

Это работает, потому что вы отсортировали по столбцу "описание"Это означает, что вы знаете, что все строки с одинаковым «описанием» будут объединены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...