Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

MySQL таблица настроек

714
22 октября 2010 года
clgs
226 / / 29.10.2008
Банальный вопрос, но не знаю как лучше реализовать.
[COLOR="Gray"]Задача: Создать таблицу настроек сайта, т.е. при инициализации происходит обращение к этой таблицы. Возможность расширения.[/COLOR]
Сначала думал о горизонтальной таблице, но пришел к выводу что вертикальная будет удобнее, а также разбить значение по типам, вот что получилось:
 
Код:
CREATE TABLE `cl_setting` (
`name` VARCHAR( 15 ) NOT NULL ,
`valueInt` INT NULL ,
`valueBigInt` BIGINT NULL ,
`valueVarchar` VARCHAR( 255 ) NULL ,
`vatueText` TEXT NULL ,
`valueType` ENUM( 'Int', 'BigInt', 'Varchar', 'Text' ) DEFAULT NULL ,
`type` ENUM( 'const', 'var' ) DEFAULT 'const' NOT NULL ,
PRIMARY KEY ( `name` )
);

Вопрос, может проще сделать один тип поля
 
Код:
`value` TEXT NULL

и всё хранить в нем? Или есть способ более экономичный и простой?

[COLOR="Gray"]Заранее спасибо за ответы.[/COLOR]
6
22 октября 2010 года
George
4.1K / / 05.01.2007
Мне нравится так: ID, option_name, option_value. В вордпрессе что-то похожее сделано.
369
22 октября 2010 года
Kesano
451 / / 09.10.2007
Жорж, пару топиков назад вы писали что ВП говно и неудачный пример :)

Топикстартеру:
Предлагаю такую таблицу, которая не сложна в обслуживании и удобно управляется:
id (int) primarykey autoincrement
param_name (tinytext)
param_value (tinytext)
param_text (tinytext) // для вывода русскоязычного описания в админке, например

---
таким образом поля могут принимать как численные значения, так и текстовые, нет никаких проблем с добавлением новых переменных, да и чтение просто.

Не знаю, каким языком программирования вы пользуетесь, но вот например ПХП нетипизированный язык, у вас одно и то же поле может быть и int и string и double (правда, некоторые это считают недостатком).

 
Код:
$res=mysql_query("SELECT * FROM system_table ");
while($arr=mysql_fetch_array($res)) {
 $system[$arr["param_name"]]=$arr["param_value"];
}


Всё, у вас есть массив системных данных.
6
22 октября 2010 года
George
4.1K / / 05.01.2007
Цитата: Kesano
Жорж, пару топиков назад вы писали что ВП говно и неудачный пример :)

В плане шаблонизации да. И многого другого тоже. А вот организация метаданных для постов, записей и пользователей мне как-раз таки понравилась.

274
22 октября 2010 года
Lone Wolf
1.3K / / 26.11.2006
тю в phpBB аналогично реализовано.
Правда там по извращенней они global используют
244
22 октября 2010 года
UAS
2.0K / / 19.07.2006
Имхо намного проще хранить так, как George сказал.
Я, правда, отказался от хранения настроек (общих для всего сайта) в БД - храню в XML или INI, смотря по ситуации. Проще, быстрее, удобнее.
6
22 октября 2010 года
George
4.1K / / 05.01.2007
Цитата: UAS
Имхо намного проще хранить так, как George сказал.
Я, правда, отказался от хранения настроек (общих для всего сайта) в БД - храню в XML или INI, смотря по ситуации. Проще, быстрее, удобнее.

А я создаю небольшой php файлик, в котором объявляю массив с настройками и определяю их там. Потом инклудю этот файлик куда мне надо и радуюсь. Так в друпале сделано.

274
22 октября 2010 года
Lone Wolf
1.3K / / 26.11.2006
Цитата: George
А я создаю небольшой php файлик, в котором объявляю массив с настройками и определяю их там. Потом инклудю этот файлик куда мне надо и радуюсь. Так в друпале сделано.



Я так понимаю тут предполагаются те настройки, которые может менять пользователь.. В случае форума - админ.(Название форума, кол-во постов настраницу и т.д. и т.п.)
А такие как адресс мускуля, путь к рути-директори ... есно проще в файле задать. А формат файла, тот уже каждый себе сам выбирает. php,xml,yaml

6
22 октября 2010 года
George
4.1K / / 05.01.2007
Цитата: Lone Wolf
Я так понимаю тут предполагаются те настройки, которые может менять пользователь.. В случае форума - админ.(Название форума, кол-во постов настраницу и т.д. и т.п.)


ну вот тогда так, как в вордпрессе.

396
23 октября 2010 года
SibBear
223 / / 27.07.2006
Сори, что не совсем по теме, не хотел для мелочи отдельную тему создавать:

MySQL
таблица:

id (autoinc), type1, type2, text

записывается только type1, type2 и text. Если запись изменяется, то сначала делаю DEL WHERE type1=10 AND type2=3, и потом новый INSERT. В итоге 2 запроса.
Можно ли сделать сию операцию одним запросом?
7
23 октября 2010 года
@pixo $oft
3.4K / / 20.09.2006
REPLACE не?
396
23 октября 2010 года
SibBear
223 / / 27.07.2006
Цитата: @pixo $oft
REPLACE не?


а я же id не знаю, мне чтобы его получить нужно так же запрос делать... Если знать id то можно и ON DUBLICATE и REPLACE использовать.

15
24 октября 2010 года
shaelf
2.7K / / 04.05.2005
А апдейтить по тому же условию, что и удаляешь не?
274
24 октября 2010 года
Lone Wolf
1.3K / / 26.11.2006
а у тебя связка type1 - type2 уникальна? Или как раз фишка в том. что удаляются все записи с таким условием?
64K
24 октября 2010 года
mila200480
3 / / 24.10.2010
Здравствуйте, помогите пожалуйста. Не могу чтобы mysql обрабатывала запросы со скрипта php. Что нужно сделать для связи mysq и localhost
64K
24 октября 2010 года
mila200480
3 / / 24.10.2010
написала скрипт
?
/* Определяем значения переменным */
$hostname="localhost";
$username="root";
$password="";
/* Имя базы данных */
$dbName="test";
/* Таблица MySQL */
$usertable="test";
/* Создать соединение */
MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу подсоединиться");
/* Выбор БД */
MYSQL_SELECT_DB($dbName) or die("Не могу выбрать БД");
/* Введение информации в БД */
$query="INSERT INTO $usertable VALUES ('$user_name','$phone','$job','$address')";
$result=MYSQL_QUERY($query);
/* Закрыть соединение */
MYSQL_CLOSE();
print "Запись введена в БД! <br>";
print "<a href='index.html'>Назад в меню</a>";
?>
но он не добавляет данные в базу, я думаю нет соединения
64K
24 октября 2010 года
mila200480
3 / / 24.10.2010
<html>
<head>
<title>form1</title>
<body>
<form method=post action="form1.php">
<br><b>Введите Ваше имя:</b>
<br><input name="user_name" value="" size=30>
<br><br><b>Введите номер Вашего телефона:</b>
<br><input name="phone" value="" size=10>
<br><br><b>Введите краткую характеристику:
<br><TEXTAREA NAME="job" ROWS=10 COLS=40></TEXTAREA>
<br><br><b>Введите свой адрес:</b>
<br><input name="address" value="" size=20>
<br><br><input type="submit" value="Зарегистрировать">
</form>
</body>
</html>
что нужно сделать чтобы данные заносились в базу данных
244
24 октября 2010 года
UAS
2.0K / / 19.07.2006
А описание ошибки никак? или or die просто остался копипастом с готового кода без осознания, что это такое?
используйте mysql_errno() и mysql_error() для того, чтобы получить описание ошибки.
Также ошибок здесть может быть куча, начиная от того, что вместо $user_name следует юзать $_POST['user_name'] и т.д.

Кстати, для этого надо создавать отдельную тему + писать все в одном сообщении.
396
24 октября 2010 года
SibBear
223 / / 27.07.2006
Цитата: Lone Wolf
а у тебя связка type1 - type2 уникальна? Или как раз фишка в том. что удаляются все записи с таким условием?


да, в этом фишка, они могут быть не уникальными, уникальный только id

274
24 октября 2010 года
Lone Wolf
1.3K / / 26.11.2006
ну тригер написать можно попробывать..
6
24 октября 2010 года
George
4.1K / / 05.01.2007
Цитата: Lone Wolf
ну тригер написать можно попробывать..


Триггеры появились только в последних версиях этого жуткого MySQL (вроде как), поэтому не факт, что получится. Хотя и да, это вроде самое кошерное решение проблемы.

274
24 октября 2010 года
Lone Wolf
1.3K / / 26.11.2006
Support for triggers is included beginning with MySQL 5.0.2.

Не в таких уж и последних, единственное можно ли их на myISAM вешать...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог