| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MySQL > Древовидная структура для страниц |
| Автор: GZep 26.10.2010, 09:26 | ||||||
| Здравствуйте! Есть веб-приложение с таким вариантом наименовая страниц:
То есть используется точечная нотация. Так же установлено, что индекс файл в каталоге - index. То есть projects. == projects.index Для выборки использую такой запрос:
Хотелось бы узнать как при такий структуре (когда нету поля `parent_name`) вложить в запрос выборку поля `title` из родительский страниц? Впринципе, могу до запроса уже скриптом составить список радительских страниц, расспарсив projects.myproject.edit. То есть оплучится:
Буду рад любой помощи. P.S. хотелось бы все таки без id и parent_id обходится... |
| Автор: skyboy 26.10.2010, 10:01 |
| вопрос в том, как средствами SQL вырезать из строки последнюю точку и следующие за ней символы? |
| Автор: GZep 26.10.2010, 15:38 | ||||||||
ненене... потому что:
в общем, видимо, раз дело зашло о функции - так и предется делать. Ну да, это самый простой способ, самый быстрый и лежит на поверхности. Тогда, подскажите пожалуйста: я в join не силен вообще никак, помогите составить запрос. Нужно к этому запросу:
добавить второй запрос - выборку имен и тайтлов у родительских страниц:
то есть объединить эти запросы. У родительский записей нужно грузить только `name` и `title`. Если не затруднит, конечно. Сам пробовал через phpMyAdmin делать JOIN-выборку, да только не вышло - не научился пока, опыта мало. |
| Автор: skyboy 26.10.2010, 21:42 | ||
union позволяет объединить в один запрос только запросы с одинаковым количеством полей в результате.
|
| Автор: GZep 26.10.2010, 23:27 | ||||
спасибо. видимо, непонимание этого и было причиной неудавшихся попыток выборки. на ваш запрос выбралась только исходная страница без родителей. Быть может тогда выбирать так:
Или это можно оптимизировать? |
| Автор: skyboy 27.10.2010, 10:14 | ||||||||||
не понимаю. может, я неверно понял условия? вот тестовая таблица:
даже некорректный изначальный запрос
возвращает на текущих данных только три записи:
некорректный запрос потому, что если была бы запись "projects.myproject.editandsave", она бы тоже вывелась. корректный вариант будет:
и это уже нормально и предсказуемо работает. Добавлено через 2 минуты и 58 секунд опс, сорри. я, видать, не вчитался. мое решение для "канонiческого" materialized path. а тут нечто не совсем обычное. ща придумаю. Добавлено через 8 минут и 3 секунды ".index" только в конце?
|
| Автор: GZep 27.10.2010, 13:43 | ||||||
skyboy, спасибо большое, последний вариант практически исчерпывающий, но есть проблема с этим .index на конце: (ваша структура)
Практически идеал, только projects.myproject.edit должен выбираться крайним, как исходная страница, но ORDER BY length( str ) предпологает сортировку по длинне, а тот же projects.myproject.index длинее. (видимо, .index на конце - плохая идея) Наверное, я уже надоел, но немогли бы вы предложить для такого:
чтобы на выходе было:
позже подытожу - может кому-нибудь будет полезным. |
| Автор: skyboy 27.10.2010, 13:49 |
угу. тогда мучительное при большой вложенности order by length(replace(str, ".index", "")) Добавлено через 3 минуты и 1 секунду а куда тут уже .index делся? |
| Автор: GZep 27.10.2010, 16:59 |
| skyboy, ааа... всё! это победа а все, не нужно, order by length(replace(str, ".index", "")) решил все проблемы : ) |
| Автор: skyboy 27.10.2010, 18:26 |
| два ограничения: по скорости работы(большое количество записей - невозможность использовать ключи из-за использования функции - большее время выполнения) и .index должно быть только в хвосту. ".indexStage" и прочие ".index*" не допускаются |
| Автор: GZep 5.11.2010, 00:16 | ||||||||
почему же? всё правильно, только если такая структура:
dir.index будет изменяться на dir и при выборке будет первее index. Решается так:
сначало подумал, что такой подход даст проблемы в такой структуре:
но проблем не возникло, потому что подстрока index вырезается из всех значений для установки сортировки. За счет того, что подстрока вырезается у всех - проблем и не возникает. |
| Автор: skyboy 5.11.2010, 14:12 |
| блин, чувствую себя извращенцем. у тебя пробела быть не может, верно? тогда вырезай ".index" из concat(str, " ") - это даст уверенность, что .index будет вырезаться только из хвоста. |
| Автор: GZep 7.11.2010, 12:50 |
| ок. пасибо : ) тема, видимо, раскрыта полностью, и исчерпала себя... |