Эффективный способ хранения таблицы данных флажков в базе данных MySQL - PullRequest
0 голосов
/ 08 марта 2012

Table format

У меня есть таблица данных, состоящая из флажков, и я хочу найти эффективный способ сохранить ее в базе данных MySQL. На данный момент HTML-код, как показано ниже

<tr class="weekpattern">
            <th class="collabel tlc"></th>
            <th class="collabel">1</th>
            <th class="collabel">2</th>
            <th class="collabel">3</th>
            <th class="collabel">4</th>
            <th class="collabel">5</th>
            <th class="collabel">6</th>
            <th class="collabel trc">7</th>
        </tr>
        <tr class="weekpattern">
            <th class="rowlabel" shift="a"> A </th>
            <td align="center" valign="middle"><input type="checkbox"  shift="a"  value="1" name="a1"></td>
            <td align="center" valign="middle"><input type="checkbox"  shift="a"  value="1" name="a2"></td>
            <td align="center" valign="middle"><input type="checkbox"  shift="a"  value="1" name="a3"></td>
            <td align="center" valign="middle"><input type="checkbox"  shift="a"  value="1" name="a4"></td>
            <td align="center" valign="middle"><input type="checkbox"  shift="a"  value="1" name="a5"></td>
            <td align="center" valign="middle"><input type="checkbox"  shift="a"  value="1" name="a6"></td>
            <td align="center" valign="middle"><input type="checkbox"  shift="a"  value="1" name="a7"></td>
        </tr>
        <tr class="weekpattern">
            <th class="rowlabel"> B </th>
            <td align="center" valign="middle"><input type="checkbox"   value="1" name="b1"></td>
            <td align="center" valign="middle"><input type="checkbox"   value="1" name="b2"></td>
            <td align="center" valign="middle"><input type="checkbox"   value="1" name="b3"></td>
            <td align="center" valign="middle"><input type="checkbox"   value="1" name="b4"></td>
            <td align="center" valign="middle"><input type="checkbox"   value="1" name="b5"></td>...

Это означает, что мне придется несколько раз повторить приведенные ниже коды:

$_SESSION['a1'] = $_POST['a1'];
    $_SESSION['a2'] = $_POST['a2'];
    $_SESSION['a3'] = $_POST['a3'];
    $_SESSION['a4'] = $_POST['a4'];
    $_SESSION['a5'] = $_POST['a5'];
    $_SESSION['a6'] = $_POST['a6'];...

Есть ли лучший способ сохранить значения в базе данных mysql?

Ответы [ 2 ]

5 голосов
/ 08 марта 2012

«Эффективный» - это слегка двусмысленный термин.С точки зрения требований к хранилищу наиболее эффективным решением будет битовое поле - но это приведет к очень неэффективным запросам - и будет трудно адаптироваться к изменениям в модели данных.Если бы это был я, я бы просто нормализовал это:

CREATE TABLE responses (
   respondent_id INTEGER NOT NULL, /* to reference the set of answers */
   row_id VARCHAR(1) NOT NULL,
   col_id INTEGER NOT NULL,
   response ENUM ('NO', 'YES') NOT NULL
   PRIMARY KEY (respondent_id, row_id, col_id)
);

Я бы также использовал вложенный массив для эмуляции многомерного массива в PHP:

$rows=array('A', 'B', 'C', 'D', 'E', 'F'); 
for ($y=0; $y<7; $y++) {
   print "<tr>\n";
   for ($x=1; $x<=7; $x++) {
     print "<td><input type='checkbox' name='box[$x][$y]'></td>\n";
   }
   print "</tr>\n";
} 
0 голосов
/ 08 марта 2012

Вы можете использовать в качестве сериализации или JSON, как {a1:0, a2:1,a3:0} когда выберете эти данные ... расшифруйте их снова ... Я предпочитаю этот способ ...

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