Выбрать значение строки MySQL в качестве заголовка столбца? - PullRequest
0 голосов
/ 26 января 2011

Я пытаюсь создать настраиваемую и расширяемую систему профилей для моей CMS. С точки зрения пользователя это просто, но для администратора я хочу, чтобы все данные, включая данные профиля, были доступны для поиска. Поля профиля могут быть добавлены "плагинами", которые также могут добавлять новые поля для поиска. Я не знаю, возможно ли то, что я пытаюсь сделать с MySQL, чтобы сделать эту работу, или я делаю это совершенно неправильно.

Итак, пользователи хранятся в одной таблице (пользователи) со столбцами для идентификатора, адреса электронной почты, пароля и уровня доступа.

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

Параметр и значение в основном являются данными профиля. Например, параметром может быть «возраст», а значением может быть «22».

То, что я хочу попробовать, - это выбрать таблицу пользователей с объединенной информацией профиля, чтобы параметр был сопоставлен с дополнительным столбцом. В итоге получается так, прямо из MySQL:

id    email    password    access_level   age
1     a@a.com  *****       1              22
2     b@b.com  *****       2              25
3     c@c.com  *****       2              25

Я просматривал сводные таблицы весь день, но из всего, что я вижу, "имя столбца" предопределено. В этом случае я хочу, чтобы «имя столбца» происходило из самой строки.

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

Любые предложения будут высоко оценены. :)

1 Ответ

2 голосов
/ 26 января 2011

Что ж, если вам нужно знать имена столбцов заранее, вы можете запросить базу данных information_schema:

SELECT COLUMN_NAME
FROM information_schema.COLUMNS
WHERE TABLE_NAME='your table'

Однако, это получает необработанные имена столбцов. Если вы используете псевдонимы в своем запросе, вам придется получать их косвенно:

SELECT somefield AS alias1, otherfield AS alias2
FROM ...

, а затем

$stmt = mysql_query($query);
$first = true;
while($row = mysql_fetch_assoc($stmt)) {
   if ($first) {
      $column_names = array_keys($row);
      ... display column names here
      $first = false;
   }
   ... output row here
}
...