[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: График работы в конкретный день недели
WisesT
Доброго дня.
Подскажите, пожалйста, как лучше. Не могу сообразить толково.
Есть страничка, где вывадится список заказов в виде таблицы.
номер-клиент-инфа-инфа-телефон

у каждого клиента есть график работы.
Например.

Клиент1 пн.9-18, вт.9-18, ср.9-18, чт.9-18, пт.9-16, сб.Вых, вс.Вых.
Клиент2 пн.9-18, вт.9-18, ср.9-18, чт.9-18, пт.9-18, сб.Вых, вс.Вых.

Что я пытаюсь написать.
Когда загружается страница сегодняшних заказов - определяется текущий день недели
$cur_day_of_week=date("l");//день недели  на сегодняшнюю дату
echo "Сегодня ".$cur_day_of_week;

Что возвращает Monday, Tuesday и тд соответственно сегодняшней дате.

Дальше, по Клиенту(фирме) выбираю график работы Клиента(фирмы) сегодня.
SELECT FROM clients $cur_day_of_week WHERE firma=$row['firma']


таблица clients
id 	int(11)	Нет 	 	 
firma varchar(50)
adress varchar(100)
mail varchar(50)
site varchar(50)
oplata varchar(50)
sunday varchar(50) //тут значения в виде 9-18
monday varchar(50) //а тут может быть 9-16
и т д

результат запроса вывожу в всплывающем окошке CSS+html.

Что мне не нравится в моем варианте.
Кто-то здесь на форуме втолдычил мне "дату и время нужно хранить в правильных форматах!"
а тут varchar -непорядок.
Предполагаю что можно организовать таблицу
id 	int(11)	Нет 	 	 
firma varchar(50)
adress varchar(100)
mail varchar(50)
site varchar(50)
oplata varchar(50)
sunday_s time() //тут значения в виде 9.00
sunday_do time() //тут значения в виде 18.00

и так для каждого дня

Но тогда я не знаю как выстроить запрос для сегодняшнего дня.

Прошу вашего напутствия.
Oyeme
У Вас не правильное проектирование базы данных.

Создайте отдельную таблицы для рабочих часов.И только потом работайте с ней используя JOIN.

Что-то типо такого:

WORK_HOURS
Client_id - INTEGER
DayOfWeek - INTEGER (0-6)
OpenTime - TIME
CloseTime - TIME
WisesT
А как, исходя из этого варианта, будет выглядеть запрос?
SELECT * FROM clients JOIN WORK_HOURS ON id=Client_id

Верно?
совсем не знаком с JOIN

Эм, и как это завязать на текущем дне недели?
Oyeme
В интернете полно примеров

http://www.codinghorror.com/blog/2007/10/a...-sql-joins.html
WisesT
а как с днем недели?
точнее как подвязать текущий день недели?
Oyeme
Выбераете все записы с таблици часов по конкретному клиенту , где полем являеться
DayOfWeek

0.Monday
1.Tuesday
2.Wednesday
3.Thursday
4.Friday
5.Saturday
6.Sunday
WisesT
а вот тут не понял. Можно расписать детальнее? буду благодарен.
Oyeme
Создал пример:

CREATE TABLE `hours` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`client_id` INT(10) NULL DEFAULT NULL,
`DaysOfWeek` INT(10) NULL DEFAULT NULL,
`OpenTime` TIME NULL DEFAULT NULL,
`CloseTime` TIME NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)

COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT
=1;


Client

CREATE TABLE `client` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)

COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT
=1;


Вытащить всех клиентов и их часы работы.(сегодня)

SELECt c.*,h.DaysOfWeek,h.OpenTime,h.CloseTime FROM client c
JOIN hours h ON c.id = h.client_id
WHERE
DaysOfWeek = WEEKDAY(NOW())
WisesT
Подскажите, пожалуйста еще вот что.
Таблица clients у меня уже есть. Она наполнена.
id 	int(11)	Нет 	 	 
firma varchar(50) Нет
adress varchar(100) Нет
tel varchar(50) Нет
fax varchar(50) Нет
mail varchar(50) Нет
site varchar(50) Нет
oplata varchar(50) Нет

593 клиента внесено.
Некоторые клиенты удалялись. Тоесть id может быть 1, 2, 3, 5, 15, 16, 17, 76
а как жде для каждого из них сделать таблицу hours, если все завязано на id из таблицы clients.

Руками чтоль? О_о

П.С. Да и при создании нового клиента тоже, не пойму как вносить сразу в две таблицы?
При создании нового клиента мне нужно будет вносить его данные в таблицу clients, а время работы в таблицу hours
Это как?

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

И последнее. Расшифруйте пожалуйста ваш запрос. Как я понимаю это "перекрестный" запрос. Я такого ситаксиса еще не видел. Особенно интересно
SELECt c.*,h.DaysOfWeek,h.OpenTime,h.CloseTime FROM clients c
JOIN hours h ON c.id = h.client_id
WHERE
DaysOfWeek = WEEKDAY(NOW())
WisesT
Скажите, пожалуйста.
Подойдет ли мне

insert into clients (firma...) values (firma...);
insert into hours (client_id...) values (last_insert_id(),...);

под "..." я подразумеваю все необходимые поля.
Oyeme
1.Почитайте про alias http://www.w3schools.com/sql/sql_alias.asp
2.Сейчас у Вас не верная база данных.Вам нужно переделать все.Соответственно каким-то скриптиком который разберит и переделает это под новую структуру.
2.Да все верно,Вы делаете столько запросов на создание строк сколько нужно.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.