![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Geolog |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 18.3.2005 Репутация: нет Всего: 1 |
Есть таблица в которой имеется поле с типом enum и значениями например: понедельник, вторник, среда и т.д.
Вопрос следующий - как мне в php скрипте получить все возможные значения поля enum для добовления их в выпадающий список. |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
в php скрипте это реализуется функцией http://php.ru/manual/function.array-unique.html
однако, наверняка того же эффекта можно достичь при составлении правильного запроса в БД |
|||
|
||||
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 7 Всего: 67 |
bars80080, думаю, имеется в виду получение списка на основе метаданных.
Первое что приходит на ум --парсинг результата SHOW FIELDS FROM table_name; Добавлено через 2 минуты и 53 секунды А еще есть готовое решение в комментариях к функции mysql_fetch_field -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
bars80080, не о том речь. а если в таблице вообще пусто - что ж, ничего не предлагать для ввода?
Geolog, у тебя mysql какой версии? если 5 или выше, то смотри в `information_schema`.`columns` особое внимание на поля data_type(тебе нужен "enum") и data_type(там в формате enum("значение1,"значение2"....)) и содержатся нужные тебе данные Добавлено через 49 секунд да уж, это поуниверсальнее будет Добавлено через 3 минуты и 7 секунд впрочем, смущает одно: если количество вариантов enum и сами варианты неизменны - почему "жестко" не забить в коде вывод("да" и "нет"). если же эти варианты могут меняться - почему бы не вынести их в отдельную таблицу? |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
ну вы на меня набросились
автор выделил слово php, и я тоже его пометил, причём здесь заморочки с mysql? хотя и коню ясно, что это лучше вытягивать из БД запросом solenko, он говорит о значениях в поле (или вы думаете под значениями подразумевается имена столбцов? Добавлено через 40 секунд не, бред, имена только латиницей |
|||
|
||||
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 7 Всего: 67 |
bars80080, почитайте тут про тип enum. И еще, как вы думаете, список возможных значений и список уже присутствующих значений это разные вещи?
Добавлено через 4 минуты и 11 секунд А вообще прийдет топикстартер и расскажет у кого телепатия лучше прокачана ) -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
м-м, какие интересные весчи оказывается есть
|
|||
|
||||
| Geolog |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 18.3.2005 Репутация: нет Всего: 1 |
Огромное спасибо за помощь.
Посмотрел все предложенные варианты
За телепатию solenko и skyboy ПЯТЁРКА Естественно нужны ВОЗМОЖНЫЕ значения поля enum. взял за основу функцию предложенную solenko по ссыле mysql_fetch_field Всё работает, так как хотел.
Хочется красоты и гармонии. Зачем дублировать значения полей, когда информация об этом уже присутствует в базе. |
||||||
|
|||||||
| skyboy |
|
||||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
а затем, что: а) хранятся в таблицах числовые индексы, а выводятся забитые заранее строки. такая двойственность может привести к не вполне очевидным "глюкам". пример:
выведет набор из значений "Y" и "N"(естественно, если версия mysql предполагает наличие информационной базы "mysql"; в противном случае - используй для примера свою таблицу с enum) но вот запрос
выведет уже двойки(1 - индекс "N" в enum'e; плюс один, указанный в запросе) и тройки(2 - индекс "Y" в enum'e; плюс один, указанный в запросе). б) возможны прелести при join'e(если два логически идентифичных поля - enum'ы с разным порядком объявления значений) - если же я ошибаюсь и enum сравниваются по значению, а не по индексу, то у нас будут дикие тормоза при группировке и объединении таблиц в) для изменения списка значений придется alter'ить поле таблицы, что практически наверняка вызовет переиндексацию поля(зачем оно тебе?) г) сортировка точно происходит не по значениям, а по индексам - то есть по порядку объявления в enum'e. и "арбуз" вполне может оказаться после "яблока", но перед "персиком". |
||||
|
|||||
| Geolog |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 18.3.2005 Репутация: нет Всего: 1 |
Спасибо за информацию о возможных "граблях" - обязательно учту при проектировании БД.
|
|||
|
||||
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 7 Всего: 67 |
skyboy, а вам не кажется, что все эти проблеммы и подводные камни надуманы? Я часто исползую enum, но почему-то никогда ни join'а по ним не приходилось делать, ни сортировки. Да и добавление значений... Возможно у меня плохо фантазия работает, но я не знаю что можно добавить в значение поля "пол". Все что вы перечислили лечится очень просто -- использованием enum по назначению.
-------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
ну, ладно. если бы у топикстартере речь шла о поле, то зачем вместо того, чтоб забить жестко в PHP-код список значений, понадобилось вдруг выдергивать из описания поля все значения enum'a? Не потому ли вдруг, что в данном случае как раз enum используется не по назначению? Я автору вопрос задал, ответа не получил. привел доказательства того, что если пихать enum куда не следует - будут проблемы. какие претензии? или ты не согласен с приведенным? Добавлено через 1 минуту и 5 секунд solenko, не находишь, что получать от СУБД информацию о поле в таблице, собственноручно тобою созданной - задача несколько странно выглядящая? |
|||
|
||||
| solenko |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 7 Всего: 67 |
Нет, не считаю, т.к. с удовольствуем пользуюсь автогенераторами вроде propel (он, кстати, не держит enum, хотя обещали поправить)
Я считаю что нет смысла приводить доказательство аксиомы "если что-то применить не по назначению, то получиш Г" . А после прочтения вашего сообшения может сложиться впечатление, что enum это вселенское зло. ) -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
||||
|
|||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
||||
|
||||
| Geolog |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 18.3.2005 Репутация: нет Всего: 1 |
Ни кто и не пытается использовать поле enum не по назначению - используя функцию определения возможных значений полей типа enum и set из базы я вопервых: возлагаю груз ответственности за набор значений на человека, который спроектировал базу данных, во вторых: использую механизмы сохранения целостности базы данных заложенные в архитектуре MySQL, в третьих мне такое решение нравиться считаю его логически верным.
Вот уж не думал, что столько дебатов вызовет этот вопрос. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |