Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как безболезненно проверить наличие в столбца? 
:(
    Опции темы
=Женек=
Дата 24.4.2009, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: нет
Всего: 1



Есть таблица, каждый месяц к ней будет добавляться столбец, с именем, содержащим текущий месяц и год.
Каким запросом проверить, есть ли столбец с таким именем, чтобы не генерировалась ошибка, а чтобы например, в случае отсутствия такового mysql возвращал ноль или что-то в этом роде?
PM MAIL   Вверх
azesmcar
Дата 24.4.2009, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



Цитата

Есть таблица, каждый месяц к ней будет добавляться столбец, с именем, содержащим текущий месяц и год.

 smile 

Код

show columns from table_name where ...

PM   Вверх
DimW
Дата 24.4.2009, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



чем вызвана необходимость добавления поля каждый месяц?

PM MAIL ICQ   Вверх
=Женек=
Дата 24.4.2009, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: нет
Всего: 1



Потому как  каждый месяц записываются данные из двумерного массива и создавать таблицу на каждый месяц неохота.
Я выстроил двумерную таблицу по рядам.
PM MAIL   Вверх
DimW
Дата 24.4.2009, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(=Женек= @  24.4.2009,  13:02 Найти цитируемый пост)
Я выстроил двумерную таблицу по рядам.

вам не кажется, что это как то не сочитается с реляционной моделью?
PM MAIL ICQ   Вверх
=Женек=
Дата 24.4.2009, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: нет
Всего: 1



show columns from oet_balls where name='d200904' -  выдало ошибку #1054 - Unknown column 'name' in 'where clause'
PM MAIL   Вверх
azesmcar
Дата 24.4.2009, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



Цитата

show columns from oet_balls where name='d200904' -  выдало ошибку #1054 - Unknown column 'name' in 'where clause' 

не name а Field
PM   Вверх
=Женек=
Дата 24.4.2009, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: нет
Всего: 1



DimW, объясняю задачу.
В учреждении работают эксперты и лаборанты. Их труд оценивается в баллах.  Причем закрепленности сотрудников друг за другом нет - все работают со всеми.
Итог работы - таблица - по горизонтали эксперты, по вертикали лаборанты, в ячейках баллы каждого эксперта с каждым лаборантом. А еще хочется каждый месяц добавлять в таблицу новые данные, сохраняя старые.

По совету людей на этом же форуме я сделал таблицу с полями:
laborant expert d200904

в соответствии со всеми возможными сочетаниями экспертов и лаборантов добавляю строки:

Э1---Л1  10
Э1--Л2   20
Э2--Л1   25
Э2--Л2  30


Критикуйте, как хотите, но программа уже написана и отлично работает. Осталось добавить внесение данных с добавлением нового столбца.


PM MAIL   Вверх
azesmcar
Дата 24.4.2009, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



а вообще горизонтальное расширение таблиц - это извращенство smile 
лучше добавить колонку DATE
PM   Вверх
DimW
Дата 24.4.2009, 13:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(=Женек= @  24.4.2009,  13:10 Найти цитируемый пост)
DimW, объясняю задачу.

=Женек=, связь многие ко многим организуется другим образом.
если критика в ваш адрес неуместна, то не буду вас переубеждать.

PM MAIL ICQ   Вверх
=Женек=
Дата 24.4.2009, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: нет
Всего: 1



Да почему же, буду рад критике.
Объясните, каким образом правильно, на будущее.
PM MAIL   Вверх
DimW
Дата 24.4.2009, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(=Женек= @  24.4.2009,  14:00 Найти цитируемый пост)
Объясните, каким образом правильно, на будущее. 

ок:

Цитата(=Женек= @  24.4.2009,  13:10 Найти цитируемый пост)
В учреждении работают эксперты и лаборанты. Их труд оценивается в баллах.

отсюда получаем сущность "ЛАБОРАНТ" и "ЭКСПЕРТ".

Код

ЛАБОРАНТ:
--------------------
id          name
--          ----
1           Иванов
2           Петров
3           Сидоров


Код

ЭКСПЕРТ:
--------------------
id          name
--          ----
10          Иванова
20          Петрова
30          Сидорова


обычно связь многие ко многим организуется третьей таблицей, в ней и будет информация о баллах:
Код

ЭКСПЕРТ_ЛАБОРАНТ:
--------------------
id          id_expert          id_laborant          ball
--          ----               ----                 ----
1           10                 1                    50
2           10                 2                    55
3           10                 3                    20
4           20                 1                    100


получаем что эксперт Иванова работала со всеми лаборантами и все лаборанты работали с ней.
эксперт Петрова работала только с лаборантом Ивановым, а Иванов и с Ивановой и с Петровой.
А эксперт Сидорова вообще ни скем не работала.

думаю обьяснил доходчиво, дерзайте. smile

PM MAIL ICQ   Вверх
=Женек=
Дата 24.4.2009, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: нет
Всего: 1



DimW, а в чем отличие того что предложили вы от того, как сделал я? (см. описание выше)
И где трехмерность, то бишь баллы для разных дат?

Таблица, которую вы создали будет относительно нехилая (в нашем учреждении в одном только отделе получится 221 ряд в таблице), а если добавить столбец date, то каждый месяц придется прибавлять по 221 записи с практически дублирующим содержимым (лаборант и эксперт). Если же расширять таблицу добавлением колонок, то добавляется всего одна колонка с цифрами.
PM MAIL   Вверх
azesmcar
Дата 24.4.2009, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



Цитата

Таблица, которую вы создали будет относительно нехилая

Нехилая таблица - это таблица в пару террабайт..а ваша таблица - самая обыкновенная..
повторяющиеся данные можно выделить в отдельную таблицу и связать через какой нибудь идентификатор
PM   Вверх
DimW
Дата 24.4.2009, 16:20 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(=Женек= @  24.4.2009,  15:41 Найти цитируемый пост)
то бишь баллы для разных дат?

периоды я бы организовал отдельной сущностью:
Код

ПЕРИОД:
--------------------
id          start_date          end_date
--          ----                ----
1           01.01.2009          31.01.2009
2           01.02.2009          28.02.2009
3           01.03.2009          31.03.2009


и в таблицу ЭКСПЕРТ_ЛАБОРАНТ добавил id_period:
Код

ЭКСПЕРТ_ЛАБОРАНТ:
--------------------
id          id_expert          id_laborant          ball          id_period
--          ----               ----                 ----          ----
1           10                 1                    50            1
2           10                 2                    55            1
3           10                 3                    20            2
4           20                 1                    100           3


=Женек=, вы бы лучше подумали как потом отчетность строить будите по своей структуре чем беспокоеться о такой ерунде:
Цитата(=Женек= @  24.4.2009,  15:41 Найти цитируемый пост)
то каждый месяц придется прибавлять по 221 записи с практически дублирующим содержимым 


PM MAIL ICQ   Вверх
DimW
Дата 24.4.2009, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(=Женек= @  24.4.2009,  15:41 Найти цитируемый пост)
а в чем отличие того что предложили вы от того, как сделал я? 

отличие в том что в моем случае реализована реляционная модель, а вашем непонятно что.
если потребуется отчет за период то в моем случае это будет выглядеть так:
Код

select ЭКСПЕРТ_ЛАБОРАНТ.*
  from ПЕРИОД
      ,ЭКСПЕРТ_ЛАБОРАНТ
 where ПЕРИОД between :p_start_date and :p_end_date -- передаем в параметры любой период
   and ЭКСПЕРТ_ЛАБОРАНТ.id_period = ПЕРИОД.id


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


Это сообщение отредактировал(а) DimW - 24.4.2009, 16:39
PM MAIL ICQ   Вверх
=Женек=
Дата 24.4.2009, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 548
Регистрация: 20.2.2005

Репутация: нет
Всего: 1



Зачем периоды отдельной сущностью?
Вроде бы как-то мождно записывать тип date чтобы он содержал только год и месяц...
PM MAIL   Вверх
Bikutoru
Дата 24.4.2009, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 1
Всего: 22



Если еще актуально:
Код

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='Database' AND TABLE_NAME='table' and COLUMN_NAME='column'

Хотя, имхо, добавлять колонку каждый месяц - плохая идея.

Добавлено через 3 минуты и 55 секунд
http://dev.mysql.com/doc/refman/5.0/en/col...ount-limit.html
Еще одна причина НЕ добавлять колонки каждый месяц:
Цитата

Every table has a maximum row size of 65,535 bytes.

При большом количестве колонок (а их может быть не больше 4096 или 1000 в InnoDB) этого может не хватить


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
DimW
Дата 24.4.2009, 17:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(=Женек= @  24.4.2009,  17:18 Найти цитируемый пост)
Зачем периоды отдельной сущностью?

это дело вкуса, в данном конкретном случае можно обойтись и добавлением поля, но представте что в будущем у вас появится еще сущность которая должна ограничиваться рамками того же приода что и лаборанты, эксперты, в этом случае сущность ПЕРИОД будет кстати.
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0881 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.