2010-07-03 2 views
2

Это немного сложная проблема для меня, и я, возможно, пойду об этом совершенно неправильно.Поиск формата столбца

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

Скажем, у меня есть эти столбцы: options_dialog_1, options_dialog_2, options_dialog_3, options_dialog_4

Там может быть разное число этих диалоговых столбцов опции, например, другой называется options_dialog_5 могут быть добавлены.

Как выбрать все столбцы параметров диалога в зависимости от их формата имени столбца?

ответ

3

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

USERS 
    id 
    name 

OPTIONS 
    id 
    user_id 
    option_dialogue_number 
    option_dialogue_value 

Это превращает столбцы в строки, которые довольно легко добраться.

+0

Я вижу, я пойду на это – Matt

+0

Вот грунт на предмет ... http://www.databasedev.co.uk/database_normalization_basics.html –

0

Я не уверен, что понимаю проблему. Вы ищете

SELECT * FROM options_table 

Что-то вроде (лже SQL - не будет работать)

SELECT (SELECT column_names where column_name LIKE 'options_dialog%') 
FROM options_table 

звуки не представляется возможным для меня (хотя я уверен, что it's possible как-то). Если вам это нужно, рассмотрите refactoring the database design или maybe use a bitmask, чтобы сохранить выбранные параметры в одном столбце.

+0

Это будет работать, но таблицы довольно большие и * ужасно медленны. Думаю, я мог бы использовать другую таблицу для опций, хотя – Matt

0

Brian's answer действительно действительно заплатит вам в течение более длительного периода. Но если вам нужно что-то быстрое & ugly, вы можете проверить «словарь метаданных» (таблицы, в которых хранятся сведения обо всех других таблицах, столбцах и т. Д.). Вы можете получить список столбцов из него с первым запросом и использовать его для создания второго.

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='mytable' AND COLUMN_NAME LIKE 'options_dialog%' 

Посетите manual on INFORMATION_SCHEMA для получения дополнительных положительных героев.