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
Форумы портала PHP.SU :: Версия для печати :: Запрос на отбор элементов, не содержащих спец. символов
Форумы портала PHP.SU » » Работа с СУБД » Запрос на отбор элементов, не содержащих спец. символов

Страниц (2): [1] 2 »
 

1. SunChase - 14 Сентября, 2011 - 18:06:24 - перейти к сообщению
Доброго времени суток.

Нужна ваша помощь по такому вопросу. Создал таблицу faculty, в которой хочу разместить элементы в иерархическом порядке, для чего использую нумерацию типа 1.1.1...

Отсюда появилась задачка отобрать главенствующие элементы, тоесть те, с которых всё начинается. Можно ли както в самом запросе "уточнить" наличие в определённом поле(назовём его field_path) спец. символов(обыкновенной точки в данном случае ?

И сразу по ходу вопрос. Есть ли функция MySql, позволяющая производить подсчёт к-ва указанных элементов в поле при отборе?

Заранее благодарен.
2. DeepVarvar - 14 Сентября, 2011 - 18:26:50 - перейти к сообщению
Ощущение что вы с файлов сразу так пересели на мускуль
SunChase пишет:
Есть ли функция MySql, позволяющая производить подсчёт
Да конечно: COUNT(field)
SunChase пишет:
использую нумерацию типа 1.1.1...
Лучше два поля: id и parent_id
3. SunChase - 14 Сентября, 2011 - 19:02:22 - перейти к сообщению
Ну я понимаю что так проще. Но дело в том, что мне нужно будет делать отбор и элементов 2,3 уровня. В теории, Я планировал выделять их с помощью подсчёта спец.символов в строке(к-во точек якобы).

Тоись:

0 точек - заглавные элементы
1 точка - прилежащие к заглавным элементы

и т.д.
4. LIME - 14 Сентября, 2011 - 19:48:18 - перейти к сообщению
а не нельзя сделать для каждого уровня вложения свою таблицу?
с полем парент_ид для каждой записи в дочерней таблице
5. DeepVarvar - 14 Сентября, 2011 - 20:52:41 - перейти к сообщению
LIME пишет:
для каждого уровня вложения свою таблицу
не рационально
(Добавление)
SunChase пишет:
0 точек - заглавные элементы
1 точка - прилежащие к заглавным элементы
Это называется layer - уровень (глубина вложенности)
Если он вам будет нужен, просто добавьте это поле к двум описанным мной выше:
id, parent_id, layer
Нулевой уровень это вложенность в корень и т.д 1,2,3...
6. SunChase - 14 Сентября, 2011 - 21:03:26 - перейти к сообщению
Нехочу ограничивать. На данном этапе задумки у меня будет 3 уровня, что в предложенном варианте уже ровно 3м таблицам, набор элементов которых по сути выходит идентичным. Но если в будущем возникнет потребность "уточнения" уровней, придётся клепать отдельную таблицу(ы). Несчитаю это разумным.

Продумывал вариант отбора уже в самом цикле, но в каждом элементе таблицы содержится поле с большим объёмом текста, что, как показали опыты, "утяжеляет" запрос. А у меня стоит задача сделать по возможности нагрузку по минимуму.
7. LIME - 14 Сентября, 2011 - 21:04:11 - перейти к сообщению
DeepVarvar пишет:
не рационально
я понял что выборка будет происходить по уровням...без джойна
тогда рационально будет?
(Добавление)
SunChase пишет:
набор элементов которых по сути выходит идентичным
кажется вы неверно поняли
8. SunChase - 14 Сентября, 2011 - 22:55:00 - перейти к сообщению
Цитата:
я понял что выборка будет происходить по уровням...без джойна
тогда рационально будет?


Выборка должна отбирать элементы определённого уровня, основываясь на поле, в котором указан "путь" элемента - 1.1 к примеру, или же просто 1.

Цитата:
кажется вы неверно поняли

Насколько я понял ваше предложение, то предлагается для каждого уровня элементов использовать новую таблицу с указанием на первичную таблицу с parent_id. Суть задачи, которую Я решил сделать, заключается в том, что все элементы имеют идентичный набор полей. Из-за этого я считаю слегка нерациональным использовать данную методу.

Как вариант, я могу написать функцию в РНР, выгребающую только нужные мне айдишники в зависимости от поставленных условий, чтобы использовать её результаты для нынешнего запроса. Но как я упоминал раньше - Я хочу попытаться обойтись по минимуму к загрузке системы("нагрузить её" Я так чую ещё представится возможность)
9. DeepVarvar - 14 Сентября, 2011 - 23:20:25 - перейти к сообщению
SunChase пишет:
Я хочу попытаться обойтись по минимуму
Ну так и прислушайтесь к нашим доводам..
10. SunChase - 15 Сентября, 2011 - 00:35:59 - перейти к сообщению
DeepVarvar пишет:
Ну так и прислушайтесь к нашим доводам..


Цитата:
сделать для каждого уровня вложения свою таблицу

Цитата:
Если он вам будет нужен, просто добавьте это поле к двум описанным мной выше:
id, parent_id, layer

к этому?
11. DeepVarvar - 15 Сентября, 2011 - 06:59:03 - перейти к сообщению
Предположим вы в админке будете добавлять/удалять документы каждый день.
Что же - с каждым уровнем создавать удалять таблицы?
А если надо будет перенести документ из одного уровня вложенности в другой?
По мне так вообще уровни не нужны.
Но если будут нужны я просто заведу еще одно поле layer.
12. LIME - 15 Сентября, 2011 - 08:22:16 - перейти к сообщению
.
13. SunChase - 15 Сентября, 2011 - 16:09:59 - перейти к сообщению
таксь. Понятно. Решил задачку доп. запросом, где уже через PHP функции формируются необходимые айдишники. Но всёравно спасибо за то что отозвались на просьбу помощи
14. Stierus - 15 Сентября, 2011 - 16:14:36 - перейти к сообщению
Если брать вашу задачу в лоб - используйте Like, если делать нормально - введите еще один столбец "level", в котором будет храниться уровень вложености 1, 2, 3 и тд ...
15. DeepVarvar - 15 Сентября, 2011 - 16:50:50 - перейти к сообщению
Stierus пишет:
еще один столбец "level"
та я об этом говорил выше

 

Powered by ExBB FM 1.0 RC1