Подскажите как грамотно организовать таблицу, которая будет иметь настройки скрипта? Или вообще создавать ли для этого таблицу? У меня есть две идеи:
- Первая (файловая), допустим $config = array(массив с настройками системы); Далее мы его сериализируем и записываем в файл. При выборке настроек делаем так: $config = unserialize(file(file.dat));
- Второй создать таблицу mysql
Где:
Настройка1 = Значение
Настройка2 = Значение
И и.д., тоесть для каждого параметра настройик системы (например, количество сообщений на страницу) Создавать отдельный столбец
Выборку делать так: SELECT * FROM `config` LIMIT 1
Хотелося бы узнать ваше мнение, возможно вы вобще что-то другое посоветуете? Буду благодарен 
Или возможно ко втором варианту для повышения скорости работы стоит добавить еще столбец `id` и задать ему значение 1. И выборку делать так: SELECT * FROM `config` WHERE `id`='1' LIMIT 1
09 Фев 2011, 12:18Делать запрос для получения одного значения очень ресурсоемко, я бы получал все значения из таблицы config в массив, потом уже из массива получал бы необходимые ключи. Примерно вот так это реализовано у меня в движке:
1. Таблица
CREATE TABLE IF NOT EXISTS `a_config` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`module` varchar(30) NOT NULL,
`key` varchar(30) NOT NULL,
`value` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
2. Получение данных в массив
$CONFIG = array();
$result = $db->query("SELECT * FROM #__config");
while($item = $db->fetch_array($result)) $CONFIG[$item['module']][$item['key']] = $item['value'];
3. Добавление массива в статический класс конфигурации
Config::set_array($CONFIG);
4. Получение значений конфигурации в любом месте движка
Config::get('module_name', 'config_key');
Сам класс конфига:
class Config {
/**
* Статическое хранилище для данных
*/
protected static $config_data = array();
/**
* Проверяет существуют ли данные по ключу
*
* @param string $name
* @return bool
*/
public static function exists($module, $item)
{
return isset(self::$config_data[$module][$item]);
}
/**
* Возвращает данные по ключу или null, если не данных нет
*
* @param string $name
* @return unknown
*/
public static function get($module, $item = '')
{
if(!empty($item))
return (isset(self::$config_data[$module][$item])) ? self::$config_data[$module][$item] : null;
else return (isset(self::$config_data[$module])) ? self::$config_data[$module] : null;
}
/**
* Сохраняет данные по ключу в статическом хранилище
*
* @param string $name
* @param mixed $data
* @return unknown
*/
public static function set($module, $item, $value)
{
return self::$config_data[$module][$item] = $value;
}
/**
* Запись массива данных
*
* @param $config_array Добавляемый массив данных
* @return void
*/
public static function set_array($config_array)
{
self::$config_data = array_merge(self::$config_data, $config_array);
}
}
Ant0ha, хм, посмотрел, не очень ли много кода по сути для выборки данных из БД?
09 Фев 2011, 13:17Зависит от конкретных задач, это один из вариантов решения. Лично для меня оптимальное.
09 Фев 2011, 13:25Ant0ha, понимаю. Но стоит ли мне такое вклеивать для получения настроек? Какая выгода из того что ты юзаеш ООП? Вообщем можешь перечислить плюсы твоего варианта? 
Ant0ha, а можно вместо $CONFIG[$item['module']][$item['key']] = $item['value']; и Config::set_array($CONFIG); сделать через магию
красивее получится, и кода меньше 
1. Работает модульно. Не будешь путаться от какого модуля какой ключ, можешь получать массивы ключей для конкретного модуля
2. Не нужно создавать поля для каждого ключа настроек
3. Можно получать и назначать значения ключей в любом месте скрипта не пользуясь глобальными переменными.
Сама реализация класса не идеальная, но вполне работоспособная и, главное, удобная.