2011-01-26 4 views
0

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

Таким образом, у меня есть пользователи, хранящиеся в одной таблице (пользователи), с столбцами для id, email, password и access_level.

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

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

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

id email password access_level age 
1  [email protected] *****  1    22 
2  [email protected] *****  2    25 
3  [email protected] *****  2    25 

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

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

Любые предложения были бы очень признательны. :)

ответ

2

Ну, если вам нужно знать имена столбцов заранее, вы можете запросить 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 
} 
Смежные вопросы