Задать вопрос
peterzubkoff
@peterzubkoff

Как сделать ЧПУ без id?

Есть URL вида site.ru/book?id=1. А хочется сделать так: site.ru/book/php-dlya-chajnikov.
Содержание страницы выводится из БД по id. Не хочу добавлять в конец адреса айдишник.

Вижу два возможных решения:
1. Передавать id через POST
Вот даже не знаю как это реализовать, ибо не хочется прописывать сто разform method="post"

2. Выводить из БД по id вида «php-dlya-chajnikov».
SELECT id, title, author FROM books WHERE id='php-dlya-chajnikov'

Здесь, по-моему, скорость будет низкая. Слышал что не рекомендуется использовать в качестве primary key поле varchar.

Наверняка есть какое-нибудь решение, которым пользуются крупные сайты:
mann-ivanov-ferber.ru/books/stranica_v_den
litres.ru/adam-trahtenbergdevid-sklyar/php-recepty...
  • Вопрос задан
  • 883 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 2
Denormalization
@Denormalization
Это называется велосипед.
Проблема решается очень просто:
"site.ru/book/php-dlya-chajnikov" - вот эта часть "php-dlya-chajnikov" называется "slug".
В БД создается дополнительное поле slug, куда при создании записи автоматически, или вручную записывается сокращенное название поста.
Затем просто делаем выборку по нему:
SELECT id, title, author FROM books WHERE slug='php-dlya-chajnikov'
Ответ написан
@remzalp
Программер чего попало на чем попало
Дополню D' Normalization
1. Завести таблицу вида id, slug, причем slug char, будет чуть быстрее (индекс не забываем). А сама таблица с приличной вероятностью будет целиком попадать в кэш.

Самый простой вариант запроса
SELECT id, title, author FROM books WHERE id=(select id from slugs where slug='php-dlya-chajnikov')

2. Добавить в рецепт sphinxsearch.com, ибо он резок как понос, но это план на очень далёкое будущее, хотя если на нем реализовать поиск по описаниям, то будет очень хорошо.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@iSensetivity
бухгалтер, програміст-самоук
Здесь, по-моему, скорость будет низкая.

Вам хватит, не бойтесь.
Ответ написан
biryerde
@biryerde
1. Передавать id через POST

так не нужно...
через реврайтом берем название из бд
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы