Varlenka
Гость
|
|
« : 10-10-2003 10:37 » |
|
здравствуйте, подскажите как можно построить таблицу в mysql о занятости пользователей на неделю
отрезков времени 5 (8-10, 10-12, ...) с понедельника по пятницу
|
|
|
Записан
|
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #1 : 10-10-2003 10:48 » |
|
Ну например : user_id, otrezok_id, day_id, otrezok
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #2 : 10-10-2003 10:51 » |
|
Предлогаю два варианта: можно хранить информацию о каждом отрезке в отдельной записи (на случай если отрезков со временем станет не 5), а можно о всех пяти в одной. Т.к. задача не практическая, а лабораторка, то лучше второй вариант - в одной строке. Есть вопросы: 1) хранится будет информация только по одной неделе, или нет? 2) если одна неделя, то неделя календарная, или от сегодня + 6(7?) дней?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Varlenka
Гость
|
|
« Ответ #3 : 10-10-2003 10:52 » |
|
в смысле day_id?
пример таблицы
user_1 poned 8-10 user_1 poned 12-14 user_2 pjatn 12-14
что-то вроде того?
|
|
|
Записан
|
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #4 : 10-10-2003 10:56 » |
|
в смысле day_id? айди дня недели, понедельник(1)-пятница(5)
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
Varlenka
Гость
|
|
« Ответ #5 : 10-10-2003 11:06 » |
|
Предлогаю два варианта: можно хранить информацию о каждом отрезке в отдельной записи (на случай если отрезков со временем станет не 5), а можно о всех пяти в одной. Т.к. задача не практическая, а лабораторка, то лучше второй вариант - в одной строке. как раз не лабораторка. хранить информацию нужно только на неделю, причем рабочую. с понедельника по пятницу с 8 до 18 потом нужно по этой таблице искать время, когда больше всего пользователей свободно varlenka
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #6 : 10-10-2003 11:08 » |
|
Varlenka, ну а прочие вопросы? На одну неделю хранить или больше?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Varlenka
Гость
|
|
« Ответ #7 : 10-10-2003 11:28 » |
|
1) хранится будет информация только по одной неделе, или нет? 2) если одна неделя, то неделя календарная, или от сегодня + 6(7?) дней?
Храниться информация о занятости должна только неделю, в начала каждой недели пользователь заполняет ее. Причем неделя от понедельника до пятницы.
|
|
|
Записан
|
|
|
|
Varlenka
Гость
|
|
« Ответ #8 : 10-10-2003 11:30 » |
|
:?: Почему mysql выдает следующую ошибку при попытке создать базу:
access denied for user: '@localhost' to database
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #9 : 10-10-2003 11:37 » |
|
Предпочитаю все "лишние" данные задавать отдельной таблицей. CREATE TABLE users ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, /* ^^^ 65535 юзеров, imho, хватит. Можно MEDIUMINT (~16M), или INT (~4Г) */ f VARCHAR(32) NOT NULL, i VARCHAR(32) NOT NULL, o VARCHAR(32) NOT NULL /* ^^^ ФИО */ );
Если нужно знать просто план занятости: CREATE TABLE business ( user_id SMALLINT UNSIGNED NOT NULL, day_ enum('пн','вт','ср','чт','пт') NOT NULL, hour_ enum('8-10','10-12','12-14','14-16','16-18') NOT NULL, UNIQUE (user_id,day_,hour_) );
Для каждого пользователя может быть 0..25 записей о каждом периоде. Или, немного изменив, можно хранить чем он занят в указаный период: CREATE TABLE business ( user_id SMALLINT UNSIGNED NOT NULL, day_ enum('пн','вт','ср','чт','пт') NOT NULL, hour_ enum('8-10','10-12','12-14','14-16','16-18') NOT NULL, task ... /* текстовое описание, ссылка на таблицу работ и т.п. */, UNIQUE (user_id,day_,hour_) );
Тут уже можно хранить как переменное число записей на каждого пользователя (как в предидущем варианте), так и все 25, а "пустые" часы соотв. помечать.
|
|
« Последнее редактирование: 20-11-2007 17:43 от Алексей1153++ »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #10 : 10-10-2003 11:39 » |
|
:?: Почему mysql выдает следующую ошибку при попытке создать базу:
access denied for user: '@localhost' to database Нет прав на CREATE TABLE... Ты как root входишь, или как другой пользователь? СУБД твоя, или есть админ?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Varlenka
Гость
|
|
« Ответ #11 : 10-10-2003 11:44 » |
|
Спасибо, вроде понятно. Скорее буду хранить для каждого периода некую занятость. UNIQUE (user_id,day_,hour_)
что это означает?
|
|
« Последнее редактирование: 20-11-2007 17:44 от Алексей1153++ »
|
Записан
|
|
|
|
Varlenka
Гость
|
|
« Ответ #12 : 10-10-2003 11:46 » |
|
access denied for user: '@localhost' to database нет прав на CREATE TABLE...
Ты как root входишь, или как другой пользователь? СУБД твоя, или есть админ?
Вроде должна как админ. Я же установила mysql себе на комп. Где нужно изменить настройки - в my.cnf
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #13 : 10-10-2003 12:16 » |
|
Спасибо, вроде понятно. Скорее буду хранить для каждого периода некую занятость. UNIQUE (user_id,day_,hour_)
что это означает? "Создать уникальный ключ из столбцов user_id, day_ и hour_". Это как поможет в поиске данных по юзеру (если строк будет много), так и автоматически проверяет чтобы небыло одинаковых строк, в которых совпадают одновременно все три указанных поля. Вроде должна как админ. Я же установила mysql себе на комп. Где нужно изменить настройки - в my.cnf Нет. my.cfn - это настройка внутренних особенностей сервера. Они обычно пользователя не интересуют. Существуют права доступа к серверу, базе, таблице и даже к конкретному столбцу, разрещения на определенные действия (создание базы, таблицы, select, insert, update и т.п.). Все это хранится в специальной ДБ с именем mysql. При изменении БД mysql стоит знать, что информация оттуда читается сервером однажды (при первом запросе), а далее хранится в памяти. Чтобы, изменив базу, заставить сервер перечитать таблицы запускаем команду FLUSH PRIVILEGES. Ну это все "лирика" Тут много что можно рассказать. Рекомендую на досуге почитать мануал. Проблема отказа, быстрее всего, кроется в том, под каким пользователем ты входишь. Т.е., принудительно его указывать. Напр. "mysql -u root".
|
|
« Последнее редактирование: 20-11-2007 17:45 от Алексей1153++ »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Varlenka
Гость
|
|
« Ответ #14 : 10-10-2003 12:31 » |
|
как-то все-же надо изменить привилегии. на команду mysql -u root выдается ошибка:(((
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #15 : 10-10-2003 12:38 » |
|
Какая ошибка? Приведи текст.
А как ты подключаешься к базе? Какой программой? В какой операционке работаешь?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #16 : 10-10-2003 12:44 » |
|
:?: Почему mysql выдает следующую ошибку при попытке создать базу:
access denied for user: '@localhost' to database access denied for user: a user to kakoi ?'@localhost' При инсталяции создаётся по дефолту юзер root со всеми правами. Попробуй из скрипта законектиться так : $link = mysql_connect("localhost", "root", "") or die ("Can't connect to server!"); if(!mysql_select_db("mysql", $link)) { print "Can't connect to the database<br />".mysql_error(); } else { print "Connected ..."; }
|
|
« Последнее редактирование: 20-11-2007 17:46 от Алексей1153++ »
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #17 : 10-10-2003 12:48 » |
|
MOPO3, есть еще анонимный вход. Строка "@localhost" говорит о попытке именно такого входа.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Varlenka
Гость
|
|
« Ответ #18 : 10-10-2003 12:48 » |
|
Какая ошибка? Приведи текст.
А как ты подключаешься к базе? Какой программой? В какой операционке работаешь? Я работаю в XP, подключаюсь к SQL-серверу через mysqld.exe, потом mysql.exe Ошибка такая: error 1044: Access denied for user: '@localhost' to database a; Varlenka
|
|
|
Записан
|
|
|
|
Varlenka
Гость
|
|
« Ответ #19 : 10-10-2003 12:57 » |
|
If you try to connect as root and get this error: Access denied for user: '@unknown' to database mysql this means that you don't have an entry in the user table with a User column value of 'root' and that mysqld cannot resolve the hostname for your client. In this case, you must restart the server with the --skip-grant-tables option and edit your `/etc/hosts' or `\windows\hosts' file to add an entry for your host.
подскажите, что это значит и где что нужно исправить?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #20 : 10-10-2003 13:02 » |
|
mysqld.exe - это сервер, mysql.exe - консольный клиент.
Вот как раз при запуске клиента нужно указать параметры подключения. Список параметров можно получить так: mysql.exe --help
Вообще-то строки mysql.exe -u root должно хватить.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Varlenka
Гость
|
|
« Ответ #21 : 10-10-2003 13:04 » |
|
MOPO3,
результат Connected ...
а что дальше?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #22 : 10-10-2003 13:05 » |
|
Кстати, вспомнил - my.cfn тут все же причем. В нем в блоке начинающемся со строки [mysql] задаются параметры по умолчанию. Но все они перекрываются параметрами командной строки.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Varlenka
Гость
|
|
« Ответ #23 : 10-10-2003 13:09 » |
|
Вот как раз при запуске клиента нужно указать параметры подключения. Список параметров можно получить так: mysql.exe --help
Вообще-то строки mysql.exe -u root должно хватить.Вообще я нашла свою ошибку - не надо было в конце строки ставить ";" На данный момент я зашла как mysql.exe -u root и просматриваю таблицу привилегий что-нибудь надо здесь сразу поменять или уже все ок?
|
|
|
Записан
|
|
|
|
Varlenka
Гость
|
|
« Ответ #24 : 10-10-2003 13:13 » |
|
Спасибо за помощь!!!
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #25 : 10-10-2003 13:18 » |
|
Пока хватит root-а , а в будушем, если на сервер будет обращение с других компьютеров, то лучше будет создать другую, более ограниченную учетную запись.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Varlenka
Гость
|
|
« Ответ #26 : 10-10-2003 14:34 » |
|
Все сделала таким образом: CREATE TABLE users ( id INT(30) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30), //LOGIN passwd_md5 VARCHAR, );
CREATE TABLE shedule ( user_id INT(30) UNSIGNED NOT NULL, day_ enum('monday','tuesday','wednesday','thursday','friday') NOT NULL, hour_ enum('8-10','10-12','12-14','14-16','16-18') NOT NULL, notes TEXT, UNIQUE (user_id,day_,hour_) );
Но при вставке нового значение в shedule список начинается с 0. Почему так?
|
|
« Последнее редактирование: 20-11-2007 17:47 от Алексей1153++ »
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #27 : 10-10-2003 18:36 » |
|
Разберу по частям и объясню ошибки... Все сделала таким образом: CREATE TABLE users ( id INT(30) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, INT(30) - тип INT имеет размер 32 бита и указывать после него в скобках больше чем 10 смысла нет name VARCHAR(30), //LOGIN passwd_md5 VARCHAR, тип VARCHAR требует указания максимального размера (0..255). Запятая поле - ошибка (возможно просто ошибка копирования в браузер ) );
CREATE TABLE shedule ( user_id INT(30) UNSIGNED NOT NULL, day_ enum('monday','tuesday','wednesday','thursday','friday') NOT NULL, hour_ enum('8-10','10-12','12-14','14-16','16-18') NOT NULL, notes TEXT, UNIQUE (user_id,day_,hour_) );
Но при вставке нового значение в shedule список начинается с 0. Почему так? Все правильно. Что вставляешь - то и получаешь. Т.е., я понимаю, ты вставляешь 0. Следует дклать так: 1) при создании нового пользователя в users: INSERT INTO users VALUES (0,"имя","пароль"); Т.е., вместо id я подставил 0. Но столбец имеет признаки AUTO_INCREMENT и PRIMARY KEY. Когда в такой столбец встабляешь 0, то реально вставляется полследнее запомненое максимальное знатение плюс один. Вставляя 0 мы можем получить новое уникальное значение. Далее надо узнать это последнее вставленное знасение (замечу: последнее значение вставленное в процессе одного и того же соеинения!) В консоли mysql.exe это можно узнать через команду "SELECT LAST_INSERT_ID()". В php это будет "$id=mysql_insert_id($connection)". "$connection" - это то же самое что и "$link" в примере МОРОЗ-а. После надо вставить строки, описывающие график работы этого пользователя в shedule. Пример: INSERT INTO shedule VALUES (LAST_INSERT_ID(),'monday','8-10','иммитация бурной деятельности'); В итоге - создаем нового пользователя "без забот": $name="карлсон"; $pass="день варения"; $con=mysql_connect("localhost","root"); mysql_select_db("твоя_база",$con); if(!mysql_query($con,"INSERT users VALUES (0,'$name','$pass')")) { # такой пользователь уже существует print("ERROR: #".mysql_errno($con)." (".mysql_error($con).")\n"); exit(1); } $weeks=('monday','tuesday','wednesday','thursday','friday'); $hoors=('8-10','10-12','12-14','14-16','16-18'); $id=mysql_insert_id($con); for($i=0;i<5;i++) { for($j=0;i<5;i++) mysql_query("INSERT shedule VALUES ($id,'$weeks[$i]','$hoors[$j]','свободен до понедельника')"); } mysql_close($con);
Далее можно через UPDATE изменять значение notes в каждой строчке по условию WHERE day_='$day' AND hour_='$hour' .
|
|
« Последнее редактирование: 20-11-2007 17:52 от Алексей1153++ »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Varlenka
Гость
|
|
« Ответ #28 : 12-10-2003 06:13 » |
|
спасибо
|
|
|
Записан
|
|
|
|
Varlenka
Гость
|
|
« Ответ #29 : 12-10-2003 06:24 » |
|
CREATE TABLE shedule ( user_id INT(30) UNSIGNED NOT NULL, day_ enum('monday','tuesday','wednesday','thursday','friday') NOT NULL, hour_ enum('8-10','10-12','12-14','14-16','16-18') NOT NULL, notes TEXT, UNIQUE (user_id,day_,hour_) );
RXL, подскажите, пожалуйста, будет ли поиск проходить быстрее, если базу составить так: CREATE TABLE shedule ( user_id INT UNSIGNED NOT NULL, time_ enum('A','B','C','D','E',.....) NOT NULL, //и так все 25 промежутка notes TEXT, UNIQUE (user_id,time_) );
|
|
« Последнее редактирование: 20-11-2007 17:53 от Алексей1153++ »
|
Записан
|
|
|
|
|