MySQL: как бы я пошел на отображение простых "категорий" для этого?


Я хочу иметь простой индекс более или менее с моим программным обеспечением для заметок PHP, каждая заметка имеет поле "язык" для языка программирования, на котором она написана. Когда я перебираю каждую запись в цикле while, я не уверен, как бы я перечислил их категории, такие как:

PHP:
  Note 1
  Note 5
SQL: 
  Note 2
  Note 3

Нужно ли мне поместить все записи во временный массив с ifs, как это?

if($field['language'] == "PHP")
    $PHPsection[] = $field;

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

2 2

2 ответа:

Вы можете группировать уже в базе данных. или Сортировать по разделам, а затем перебирать и выводить правильный код разделения, когда раздел изменяется. временный массив также является решением. учитывая ваш пример кода maby, это может указать вам на один возможный directino (хотя временный массив, конечно, не является элегантным решением, но если данных не так много, это не имеет особого значения)

<?
$result = array();
$result[] = array('section' => 'php','note' => 'bla');
$result[] = array('section' => 'php','note' => 'bla');
$result[] = array('section' => 'perl','note' => 'bla');
$result[] = array('section' => 'java','note' => 'bla');

$grouped = array();
for($i=0;$i<count($result);$i++) {
  $grouped[$result[$i]['section']][] = $result[$i]['note'];
}
print_r($grouped);

?>

Похоже, что вам нужно сделать таблицу подстановки здесь. Например, следующее.

Note_id | Language_id 
--------+------------
 1      |   1
 1      |   4
 2      |   3 
 3      |   1

Это, следовательно, связывает эти две таблицы

Note_id | Note_Name| ...
--------+----------+----
    1   | Testing  | ...
    2   | Groceries| ...

Language_ID | Language
------------+---------
    1       | English
    2       | German
    3       | Klingon

И оттуда вы можете писать запросы, такие как:

SELECT
   Note_name, Language
FROM
   languages l, notes n, language_note_lookup lnl
WHERE
   l.Language_ID = lnl.Language_ID AND
   n.Note_ID = n.Note_ID AND
   l.Language = "German"

Вы также можете легко получить список всех языков, просто сделав

SELECT Language FROM languages