| 
			| 
					
						| RXL | 
								|  | « Ответ #30 : 12-10-2003 09:38 »  |  | 
 
 Varlenka, быстрее, но это будет заметно только на большом количестве записей - порядка 100тыс-1млн. Я сомневаюсь что столько понадобится - лучше делать как удобнее. Давай рассмотрим оба варианта: 1) time_ ENUM('A','B',...) NOT NULL Достоинства: с точки зрения вычислений, их меньше: 1 столбец вместо двух и ключ короче на один байт. Кстати, тут enum не нужен - можно было бы просто задать int или tinyint. Недостатки: неудобство представления для человека, необходимость преобразования этих периодов как для отображения, так и для вычисления. 2) day_ enum('monday','tuesday','wednesday','thursday','friday') NOT NULL,   hour_ enum('8-10','10-12','12-14','14-16','16-18') NOT NULL Недостатки: см. достоинства первого варианта. Достоинства: см. недостатки первого варианта. Плюс, если надо будет ввести новые промежутки времени (напр. работа в сверхурочные/по выходным), то это пройдет легко и безболезнено как для таблицы (без потери и изменения данных: ALTER TABLE shedule CHANGE ...), так и для программы (переделывать логику не надо, только добавить диапазоны в список). RXL, подскажите,  Я еще не стар      Лучше на ты |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Varlenka 
								Гость
 | 
								|  | « Ответ #31 : 15-10-2003 12:40 »  |  | 
 
 Хорошо, RXL, на ты    |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #32 : 15-10-2003 18:02 »  |  | 
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Varlenka 
								Гость
 | 
								|  | « Ответ #33 : 21-10-2003 07:34 »  |  | 
 
 RXL, привет!Вот ты написал, что первый вариант таблицы расписания лучше для отображения. Однако я не могу догадаться каким образом это можно вывести легко  в броузер?
 
 Спасибо
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #34 : 21-10-2003 09:30 »  |  | 
 
 RXL, привет!Вот ты написал, что первый вариант таблицы расписания лучше для отображения. Однако я не могу догадаться каким образом это можно вывести легко  в броузер?
 Не совсем так - читай внимательнее. Я говорил что первый для отображения нужно преобразовывать в человеческое представление. Как бы я выбирал между этими вариантами, то для простоты выбрал бы второй (чтобы что получил, то и отображать), а иначе большой разницы нет. |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Varlenka 
								Гость
 | 
								|  | « Ответ #35 : 21-10-2003 09:33 »  |  | 
 
 Да, запуталась!
 Я же тоже выбрала второй вариант, это действительно удобнее. Но как это вывести в таблицу? :?:  :?:  :?:
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Varlenka 
								Гость
 | 
								|  | « Ответ #36 : 21-10-2003 09:35 »  |  | 
 
 Как бы я выбирал между этими вариантами, то для простоты выбрал бы второй (чтобы что получил, то и отображать), а иначе большой разницы нет. И как бы ты отображал?   |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #37 : 21-10-2003 11:09 »  |  | 
 
 Горорю об этом варианте: CREATE TABLE schedule (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_)
 );
 
Вот пример: <?phpmysql_query($con,"SELECT * FROM users LEFT JOIN schedule ON id=user_id");
 $res=mysql_store_result($con);
 
 print "<table>";
 while ($a=mysql_fetch_array($res))
 print "<tr><td>$a['name']<td>$a['day_']<td>$a['hour_']</tr>";
 print "</table>";
 
 mysql_free_result($res);
 ?>
 
Пример не стоит считать образцом - тут надо ставить немало проверок. |  
						| 
								|  |  
								| « Последнее редактирование: 20-11-2007 17:55 от Алексей1153++ » |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Varlenka 
								Гость
 | 
								|  | « Ответ #38 : 21-10-2003 11:45 »  |  | 
 
 ага, ну если в этом коде все подправить, то будет выводится просто очередная строка из базы? user_id,Monday,8-10,1
 user_id,Monday,10-12,1
 итд?
 
 Значит нет никакой возможности вывести по-человечески расписание?
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #39 : 21-10-2003 12:09 »  |  | 
 
 ага, ну если в этом коде все подправить, то будет выводится просто очередная строка из базы? user_id,Monday,8-10,1
 user_id,Monday,10-12,1
 итд?
 Хм... Почему? Опять же не внимательно читаешь - я не user_id,day_,hour_ в примере показал, а name,day_,hour_ - т.е. подразумевал нормальное имя. Значит нет никакой возможности вывести по-человечески расписание? Что захочешь,то и будет отображаться как захочешь. Придумай как надо - подскажу как сделать. |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| PSD 
								Главный специалист    Offline 
								Пол:    | 
								|  | « Ответ #40 : 21-10-2003 12:18 »  |  | 
 
 Varlenka
 
 Ты письмо мое получила или как ? |  
						| 
								|  |  
								|  |  Записан | 
 
 Да да нет нет все остальное от лукавого. |  |  | 
	| 
			| 
					
						| Varlenka 
								Гость
 | 
								|  | « Ответ #41 : 21-10-2003 12:26 »  |  | 
 
 PSD, аа, это ты    Нет, еще не смотрела Вечером смогу |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Varlenka 
								Гость
 | 
								|  | « Ответ #42 :  21-10-2003 14:38 »   |  | 
 
 PSD, только я там ничего не поняла :/ |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Varlenka 
								Гость
 | 
								|  | « Ответ #43 : 21-10-2003 17:15 »  |  | 
 
 Что захочешь,то и будет отображаться как захочешь. Придумай как надо - подскажу как сделать.
 Надо так:
 
 <table>
 <tr><td>time</td><td>Mon</td><td>Tue</td><td>Thu</td> итд</tr>
 <tr><td>8-10<td><td>1<td><td>0<td>итд</tr>
 ...
 <tr><td>8-10<td><td>1<td><td>0<td>итд</tr>
 </table>
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #44 : 22-10-2003 09:55 »  |  | 
 
 <?phpoutput_table($name,$passwd) {
 /* на входе $name и $passwd */
 global $con;
 /* $con - глобальный handle подключения к базе */
 mysql_query($con,"SELECT hour_,day_,notes FROM users LEFT JOIN schedule ON id=user_id WHERE name='$name' AND passwd_md5=MD5('$passwd')");
 if(!($res=mysql_store_result($con))) return -1;
 print "<table><tr><th>time<th>Mon<th>Tue<th>Wed<th>Thu<th>Fri</tr>";
 $r=array();
 while ($a=mysql_fetch_array($res)) $r[$a[0]][$a[1]]=$a[2];
 foreach(array('8-10','10-12','12-14','14-16','16-18') as $a) {
 print"<tr><th>$a";
 foreach(array('Mon','Tue','Wed','Thu','Fri') as $b) print "<td>".($r[$a][$b] ? ' ' : $r[$a][$b]);
 print "</tr>";
 }
 print "</table>";
 mysql_free_result($res);
 return 0;
 }
 ?>
 
Не тестировал - если не заработает - кричи. |  
						| 
								|  |  
								| « Последнее редактирование: 20-11-2007 17:57 от Алексей1153++ » |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Varlenka 
								Гость
 | 
								|  | « Ответ #45 : 22-10-2003 10:54 »  |  | 
 
 <b>RXL</b>, ты гений!!!
 Спасибо тебе большое за помощь! Урррааааааа!
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #46 : 22-10-2003 11:59 »  |  | 
 
   А что - работает?    |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Varlenka 
								Гость
 | 
								|  | « Ответ #47 : 22-10-2003 12:45 »  |  | 
 
 Ага, сразу же заработало!     И все как мне надо. Ухх, сколько я над этим мучилась    А можно встречный вопрос по горячим следам? Допустим, мне надо значение duty заменить на противоположное (ну, если на него кликнули, например) - то как обращатся к этому значению в запросе? update shedule set 'duty'=??? where hour_=??? and day_=???  :oops: |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #48 : 22-10-2003 13:09 »  |  | 
 
 Допустим, мне надо значение duty заменить на противоположное (ну, если на него кликнули, например) - то как обращатся к этому значению в запросе?update shedule set 'duty'=??? where hour_=??? and day_=???
 Не понял - duty - это новое поле в таблице БД, или что? И что такое "противоположное" значение? Это просто признак есть/нет? Уточни, пожалуйста |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Varlenka 
								Гость
 | 
								|  | « Ответ #49 : 22-10-2003 13:29 »  |  | 
 
 Ну duty - это 1(занят) или 0(свободен) - у тебя это notes."Противоположное" значение - изменение 1->0 или 0->1
 $r[$a][$b] в таблице
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #50 : 22-10-2003 14:04 »  |  | 
 
 UPDATE schedule SET duty=NOT duty WHERE user_id=$id AND day_='$day' AND hour_='$hour'
 Одно но - $id надо получить заранее - передавать его в составе линков, или хранить в сессия php. По имени/паролю как-то не очень удобно - это нужно только при входе.
 Из этих трех вариантов мне кажется предпочтительнее сессии.
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Varlenka 
								Гость
 | 
								|  | « Ответ #51 : 22-10-2003 14:35 »  |  | 
 
 Ага, значит таким образом просто заменится значение на противоположное, только вот откуда я получу эти $day , $hour? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #52 : 22-10-2003 19:03 »  |  | 
 
 Ага, значит таким образом просто заменится значение на противоположное, только вот откуда я получу эти $day , $hour? Ну с $day и $hour все просто. Модифицируем немного последнюю программу и посмотрим результат. <?phpoutput_table($name,$passwd) {
 /* на входе $name и $passwd */
 global $con;
 /* $con - глобальный handle подключения к базе */
 mysql_query($con,"SELECT hour_,day_,duty FROM users LEFT JOIN schedule ON id=user_id WHERE name='$name' AND passwd_md5=MD5('$passwd')");
 if(!($res=mysql_store_result($con))) return -1;
 print "<table><tr><th>time<th>Mon<th>Tue<th>Wed<th>Thu<th>Fri</tr>";
 $r=array();
 while ($a=mysql_fetch_array($res)) $r[$a[0]][$a[1]]=$a[2];
 foreach(array('8-10','10-12','12-14','14-16','16-18') as $a) {
 print"<tr><th>$a";
 /* начало изменений */
 foreach(array('Mon','Tue','Wed','Thu','Fri') as $b) print "<td><a href='/our_script.php?action=schedtab_click&day=$b&hour=$a'>".($r[$a][$b] ? 'free' : 'busy').'</a>;
 /* конец изменений */
 print "</tr>";
 }
 print "</table>";
 mysql_free_result($res);
 return 0;
 }
 ?>
Результат примерно такой: <table><tr><th>time<th>Mon<th>Tue<th>Wed<th>Thu<th>Fri</tr>
 <tr><th>8-10
 <td><a href='/our_script.php?action=schedtab_click&day=Mon&hour=8-10'>free</a>
 <td><a href='/our_script.php?action=schedtab_click&day=Mon&hour=10-12'>free</a>
 <td><a href='/our_script.php?action=schedtab_click&day=Mon&hour=12-14'>free</a>
 <td><a href='/our_script.php?action=schedtab_click&day=Mon&hour=14-16'>free</a>
 <td><a href='/our_script.php?action=schedtab_click&day=Mon&hour=16-18'>free</a>
 <\tr>
 .............
 </table>
Т.е. в ячейках таблицы будут слова "busy" и "free" офоррмленные как линки. При нажатии на них в браузере, на сервере будет вызван скрипт "/our_script.php" и в внутрь программы передвдутся переменные $day и $hour из параметров, а так же переменная $action со значением "schedtab_click".  По этому значению мы понимаем что сделал пользователь, выполняем UPDATE, а затем выдаем страницу с обновленной таблицей. Ну вот примерно так... При составлении относительных ссылок типа "/our_script.php?action=schedtab_click&day=Mon&hour=16-18" надо соблюдать правила предписываемые стандартом: не заносить туда запрещенные символы. Если знаешь, что вставляемая строка их не содержит, то можно напрямую вставить (как в этом примере), но лучше предостеречься и обернуть вставляемую переменную ф-ией urlencode();http://ru3.php.net/manual/ru/function.urlencode.php |  
						| 
								|  |  
								| « Последнее редактирование: 20-11-2007 17:59 от Алексей1153++ » |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Varlenka 
								Гость
 | 
								|  | « Ответ #53 : 23-10-2003 04:55 »  |  | 
 
 Т.е. в ячейках таблицы будут слова "busy" и "free" офоррмленные как линки. При нажатии на них в браузере, на сервере будет вызван скрипт "/our_script.php" и в внутрь программы передвдутся переменные $day и $hour из параметров, а так же переменная $action со значением "schedtab_click". По этому значению мы понимаем что сделал пользователь, выполняем UPDATE, а затем выдаем страницу с обновленной таблицей.
 
 RXL, спасибо за разъяснения    У меня, кстати, 0 и 1 уже оформлены как ссылки, только при обработке я не знала как и где определить day и hour, теперь разберусь:D Пойду еще почитаю про составление подобных ссылок. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| PSD 
								Главный специалист    Offline 
								Пол:    | 
								|  | « Ответ #54 : 23-10-2003 06:49 »  |  | 
 
 Н да в приложении к WEB  кластический SQL малоподходит.... Это я  о способе формирования сводной таблицы расписания на неделю. |  
						| 
								|  |  
								|  |  Записан | 
 
 Да да нет нет все остальное от лукавого. |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #55 : 23-10-2003 07:07 »  |  | 
 
 Всему свое место - БД нужна только чтобы хранить и искать, а программой можно все остальное проделать. Все не так уж сложно - главное хорошо спланировать (не всмысле самолет    ). Начинающие частенько хотят чтобы СУБД возвращала чуть ли не готовую страницу. Наблюдал такое  не раз на http://www.mysql.ru/webboard  . |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| PSD 
								Главный специалист    Offline 
								Пол:    | 
								|  | « Ответ #56 : 23-10-2003 09:07 »  |  | 
 
 Нет  клиент сервере со своим клиентом народ наоборот старается свести число обращений к серверу базы к минимуму, те получить с базы результат максимально приблеженный к необходимому для отображения.
 В данном случае    я бы написал запрос который вернулбы мне расписание за неделю в виде recordset который осталось бы только выплюнуть в гриду.
 А вы наоборот за каждым параметром  по отдельности в базу лезите.
 
 Причем это очень хорошо вписывается в код страници.
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Да да нет нет все остальное от лукавого. |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #57 : 23-10-2003 09:24 »  |  | 
 
 Ни чего подобного. Данные запрошены один раз - см. код.За сессию нужно: один раз, проверив логин/пароль, узнать id пользователя и запомнить его данные в переменных сессии, а потом один запрос на показ таблицы и один запрос на изменение. Куда же меньше? Или тебе не нравится что для выдачи таблицы 5х5 я запросил 25 строк в одном запросе?
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| PSD 
								Главный специалист    Offline 
								Пол:    | 
								|  | « Ответ #58 : 23-10-2003 11:10 »  |  | 
 
 Прошу прощения незнакомая организация языка сбила столку, проглядел что изначально массив создается а потом  в него  тыкаемся.  А при создании массива мы работаем с набором записей 3 поля хN записей и в цикле перепаковываем его в масив
 7 дней х N диапозонов так?
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Да да нет нет все остальное от лукавого. |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #59 : 23-10-2003 11:47 »  |  | 
 
 Примерно так. Первые два параметра задают координату, третий - значение. Только на 5 дней (по условию задачи в выходные можно не работать) на 5 диапазонов (получилось без обеда).
 А синтаксис тут простой - часть от С, часть от perl и немного подругому.
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	|  |