![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
GZep |
|
||||||
![]() участник Винграда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1528 Регистрация: 7.7.2006 Где: Москва Репутация: нет Всего: 32 |
Здравствуйте!
Есть веб-приложение с таким вариантом наименовая страниц:
То есть используется точечная нотация. Так же установлено, что индекс файл в каталоге - index. То есть projects. == projects.index Для выборки использую такой запрос:
Хотелось бы узнать как при такий структуре (когда нету поля `parent_name`) вложить в запрос выборку поля `title` из родительский страниц? Впринципе, могу до запроса уже скриптом составить список радительских страниц, расспарсив projects.myproject.edit. То есть оплучится:
Буду рад любой помощи. P.S. хотелось бы все таки без id и parent_id обходится... -------------------- ![]() ![]() |
||||||
|
|||||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
вопрос в том, как средствами SQL вырезать из строки последнюю точку и следующие за ней символы?
|
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Наиболее разумно создать пользовательскую функцию, выполняющую требуемое. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
GZep |
|
||||||||
![]() участник Винграда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1528 Регистрация: 7.7.2006 Где: Москва Репутация: нет Всего: 32 |
ненене... потому что:
в общем, видимо, раз дело зашло о функции - так и предется делать. Ну да, это самый простой способ, самый быстрый и лежит на поверхности. Тогда, подскажите пожалуйста: я в join не силен вообще никак, помогите составить запрос. Нужно к этому запросу:
добавить второй запрос - выборку имен и тайтлов у родительских страниц:
то есть объединить эти запросы. У родительский записей нужно грузить только `name` и `title`. Если не затруднит, конечно. Сам пробовал через phpMyAdmin делать JOIN-выборку, да только не вышло - не научился пока, опыта мало. -------------------- ![]() ![]() |
||||||||
|
|||||||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
union позволяет объединить в один запрос только запросы с одинаковым количеством полей в результате.
|
|||
|
||||
GZep |
|
||||
![]() участник Винграда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1528 Регистрация: 7.7.2006 Где: Москва Репутация: нет Всего: 32 |
спасибо. видимо, непонимание этого и было причиной неудавшихся попыток выборки. на ваш запрос выбралась только исходная страница без родителей. Быть может тогда выбирать так:
Или это можно оптимизировать? -------------------- ![]() ![]() |
||||
|
|||||
skyboy |
|
||||||||||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
не понимаю. может, я неверно понял условия? вот тестовая таблица:
даже некорректный изначальный запрос
возвращает на текущих данных только три записи:
некорректный запрос потому, что если была бы запись "projects.myproject.editandsave", она бы тоже вывелась. корректный вариант будет:
и это уже нормально и предсказуемо работает. Добавлено через 2 минуты и 58 секунд опс, сорри. я, видать, не вчитался. мое решение для "канонiческого" materialized path. а тут нечто не совсем обычное. ща придумаю. Добавлено через 8 минут и 3 секунды ".index" только в конце?
|
||||||||||
|
|||||||||||
GZep |
|
||||||
![]() участник Винграда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1528 Регистрация: 7.7.2006 Где: Москва Репутация: нет Всего: 32 |
skyboy, спасибо большое, последний вариант практически исчерпывающий, но есть проблема с этим .index на конце: (ваша структура)
Практически идеал, только projects.myproject.edit должен выбираться крайним, как исходная страница, но ORDER BY length( str ) предпологает сортировку по длинне, а тот же projects.myproject.index длинее. (видимо, .index на конце - плохая идея) Наверное, я уже надоел, но немогли бы вы предложить для такого:
чтобы на выходе было:
позже подытожу - может кому-нибудь будет полезным. Это сообщение отредактировал(а) GZep - 27.10.2010, 13:44 -------------------- ![]() ![]() |
||||||
|
|||||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
угу. тогда мучительное при большой вложенности order by length(replace(str, ".index", "")) ![]() Добавлено через 3 минуты и 1 секунду а куда тут уже .index делся? |
|||
|
||||
GZep |
|
|||
![]() участник Винграда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1528 Регистрация: 7.7.2006 Где: Москва Репутация: нет Всего: 32 |
skyboy, ааа... всё! это победа
![]() а все, не нужно, order by length(replace(str, ".index", "")) решил все проблемы : ) -------------------- ![]() ![]() |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
два ограничения: по скорости работы(большое количество записей - невозможность использовать ключи из-за использования функции - большее время выполнения) и .index должно быть только в хвосту. ".indexStage" и прочие ".index*" не допускаются
|
|||
|
||||
GZep |
|
||||||||
![]() участник Винграда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1528 Регистрация: 7.7.2006 Где: Москва Репутация: нет Всего: 32 |
почему же? всё правильно, только если такая структура:
dir.index будет изменяться на dir и при выборке будет первее index. Решается так:
сначало подумал, что такой подход даст проблемы в такой структуре:
но проблем не возникло, потому что подстрока index вырезается из всех значений для установки сортировки. За счет того, что подстрока вырезается у всех - проблем и не возникает. -------------------- ![]() ![]() |
||||||||
|
|||||||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
блин, чувствую себя извращенцем.
у тебя пробела быть не может, верно? тогда вырезай ".index" из concat(str, " ") - это даст уверенность, что .index будет вырезаться только из хвоста. |
|||
|
||||
GZep |
|
|||
![]() участник Винграда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1528 Регистрация: 7.7.2006 Где: Москва Репутация: нет Всего: 32 |
ок. пасибо : ) тема, видимо, раскрыта полностью, и исчерпала себя...
-------------------- ![]() ![]() |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MySQL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |