Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Запрос на отбор элементов, не содержащих спец. символов
Покинул форум
Сообщений всего: 94
Дата рег-ции: Июль 2010
Помог: 0 раз(а)
Доброго времени суток.
Нужна ваша помощь по такому вопросу. Создал таблицу faculty, в которой хочу разместить элементы в иерархическом порядке, для чего использую нумерацию типа 1.1.1...
Отсюда появилась задачка отобрать главенствующие элементы, тоесть те, с которых всё начинается. Можно ли както в самом запросе "уточнить" наличие в определённом поле(назовём его field_path) спец. символов(обыкновенной точки в данном случае ?
И сразу по ходу вопрос. Есть ли функция MySql, позволяющая производить подсчёт к-ва указанных элементов в поле при отборе?
Заранее благодарен.
DeepVarvar
Отправлено: 14 Сентября, 2011 - 18:26:50
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Ощущение что вы с файлов сразу так пересели на мускуль
SunChase пишет:
Есть ли функция MySql, позволяющая производить подсчёт
Покинул форум
Сообщений всего: 94
Дата рег-ции: Июль 2010
Помог: 0 раз(а)
Ну я понимаю что так проще. Но дело в том, что мне нужно будет делать отбор и элементов 2,3 уровня. В теории, Я планировал выделять их с помощью подсчёта спец.символов в строке(к-во точек якобы).
Тоись:
0 точек - заглавные элементы
1 точка - прилежащие к заглавным элементы
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
а не нельзя сделать для каждого уровня вложения свою таблицу?
с полем парент_ид для каждой записи в дочерней таблице
DeepVarvar
Отправлено: 14 Сентября, 2011 - 20:52:41
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
LIME пишет:
для каждого уровня вложения свою таблицу
не рационально (Добавление)
SunChase пишет:
0 точек - заглавные элементы
1 точка - прилежащие к заглавным элементы
Это называется layer - уровень (глубина вложенности)
Если он вам будет нужен, просто добавьте это поле к двум описанным мной выше: id, parent_id, layer
Нулевой уровень это вложенность в корень и т.д 1,2,3...
Покинул форум
Сообщений всего: 94
Дата рег-ции: Июль 2010
Помог: 0 раз(а)
Нехочу ограничивать. На данном этапе задумки у меня будет 3 уровня, что в предложенном варианте уже ровно 3м таблицам, набор элементов которых по сути выходит идентичным. Но если в будущем возникнет потребность "уточнения" уровней, придётся клепать отдельную таблицу(ы). Несчитаю это разумным.
Продумывал вариант отбора уже в самом цикле, но в каждом элементе таблицы содержится поле с большим объёмом текста, что, как показали опыты, "утяжеляет" запрос. А у меня стоит задача сделать по возможности нагрузку по минимуму.
LIME
Отправлено: 14 Сентября, 2011 - 21:04:11
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
DeepVarvar пишет:
не рационально
я понял что выборка будет происходить по уровням...без джойна
тогда рационально будет? (Добавление)
SunChase пишет:
набор элементов которых по сути выходит идентичным
кажется вы неверно поняли
SunChase
Отправлено: 14 Сентября, 2011 - 22:55:00
Гость
Покинул форум
Сообщений всего: 94
Дата рег-ции: Июль 2010
Помог: 0 раз(а)
Цитата:
я понял что выборка будет происходить по уровням...без джойна
тогда рационально будет?
Выборка должна отбирать элементы определённого уровня, основываясь на поле, в котором указан "путь" элемента - 1.1 к примеру, или же просто 1.
Цитата:
кажется вы неверно поняли
Насколько я понял ваше предложение, то предлагается для каждого уровня элементов использовать новую таблицу с указанием на первичную таблицу с parent_id. Суть задачи, которую Я решил сделать, заключается в том, что все элементы имеют идентичный набор полей. Из-за этого я считаю слегка нерациональным использовать данную методу.
Как вариант, я могу написать функцию в РНР, выгребающую только нужные мне айдишники в зависимости от поставленных условий, чтобы использовать её результаты для нынешнего запроса. Но как я упоминал раньше - Я хочу попытаться обойтись по минимуму к загрузке системы("нагрузить её" Я так чую ещё представится возможность)
DeepVarvar
Отправлено: 14 Сентября, 2011 - 23:20:25
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Покинул форум
Сообщений всего: 94
Дата рег-ции: Июль 2010
Помог: 0 раз(а)
DeepVarvar пишет:
Ну так и прислушайтесь к нашим доводам..
Цитата:
сделать для каждого уровня вложения свою таблицу
Цитата:
Если он вам будет нужен, просто добавьте это поле к двум описанным мной выше:
id, parent_id, layer
к этому?
DeepVarvar
Отправлено: 15 Сентября, 2011 - 06:59:03
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Предположим вы в админке будете добавлять/удалять документы каждый день.
Что же - с каждым уровнем создавать удалять таблицы?
А если надо будет перенести документ из одного уровня вложенности в другой?
По мне так вообще уровни не нужны.
Но если будут нужны я просто заведу еще одно поле layer.
Покинул форум
Сообщений всего: 94
Дата рег-ции: Июль 2010
Помог: 0 раз(а)
таксь. Понятно. Решил задачку доп. запросом, где уже через PHP функции формируются необходимые айдишники. Но всёравно спасибо за то что отозвались на просьбу помощи
Stierus
Отправлено: 15 Сентября, 2011 - 16:14:36
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Если брать вашу задачу в лоб - используйте Like, если делать нормально - введите еще один столбец "level", в котором будет храниться уровень вложености 1, 2, 3 и тд ...
DeepVarvar
Отправлено: 15 Сентября, 2011 - 16:50:50
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.