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 » » Вопросы новичков » Скорость работы

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

1. etoYA - 17 Мая, 2012 - 22:34:31 - перейти к сообщению
Название темы придумать не смог, в общем дело такое. У меня для ЧПУ будет транслитерироватся название поста. Как лучше сделать:

0) Записывать сразу же в базу транслитерированое название (прогоняя через функцию). И при выборке выбирать это поле тоже.
1) Выбирать название поста, а потом уже прогонять через функцию?

Вот функция.

PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. function translite($text){
  4.         $symbols = array(
  5.                 'А' => 'A','Б' => 'B','В' => 'V','Г' => 'G','Д' => 'D','Е' => 'E',
  6.                 'Ё' => 'E','Ж' => 'J','З' => 'Z','И' => 'I','Й' => 'I','К' => 'K',
  7.                 'Л' => 'L','М' => 'M','Н' => 'N','О' => 'O','П' => 'P','Р' => 'R',
  8.                 'С' => 'S','Т' => 'T','У' => 'U','Ф' => 'F','Х' => 'H','Ц' => 'C',
  9.                 'Ч' => 'Ch','Ш' => 'Sh','Щ' => 'Sh','Ь' => '','Ы' => 'Y','Ъ' => '',
  10.                 'э' => 'e','ю' => 'ju','я' => 'ya',' ' => '-',
  11.                 'а' => 'a','б' => 'b','в' => 'v','г' => 'g','д' => 'd','е' => 'e',
  12.                 'ё' => 'e','ж' => 'j','з' => 'z','и' => 'i','й' => 'i','к' => 'k',
  13.                 'л' => 'l','м' => 'm','н' => 'n','о' => 'o','п' => 'p','р' => 'r',
  14.                 'с' => 's','т' => 't','у' => 'u','ф' => 'f','х' => 'h','ц' => 'c',
  15.                 'ч' => 'ch','ш' => 'sh','щ' => 'sh','ь' => '','ы' => 'y','ъ' => '',
  16.                 'э' => 'e','ю' => 'ju','я' => 'ya'
  17.         );
  18.         return strtolower(strtr($text, $symbols));
  19. }
  20. ?>
  21.  
2. OrmaJever - 17 Мая, 2012 - 22:43:42 - перейти к сообщению
суть вопроса на каком языке записывать в бд? Русский или транслит? Однако
3. etoYA - 17 Мая, 2012 - 22:47:10 - перейти к сообщению
OrmaJever, изначально русский.

Ну к примеру у меня есть пост:

Название поста - ссылка http://site[dot]com/nazvanie-posta (транслитерированая).
текст поста.

Что лучше, сразу записывать транслитерированое название, или при выборке преобразовывать?
4. OrmaJever - 17 Мая, 2012 - 23:22:42 - перейти к сообщению
etoYA а раззница? Если захотите хранить оригинал и преобразовать при выводе бещ проблем, а если захотите хранить русский, то при выводе всегда можно перевести обратно в транслит по таблице, разницы вобще никакой, темболее как написано в заголовке "скорость работы". Это вобще вопрос в удобности и проэктировании.
5. etoYA - 17 Мая, 2012 - 23:30:14 - перейти к сообщению
OrmaJever, спасибо. Если только в удобстве, то вариант 1) имхо удобней)
6. Мелкий - 18 Мая, 2012 - 09:46:50 - перейти к сообщению
Исходные данные:
0) пришёл запрос http://example[dot]com/nazvanie-posta
1) выясняем, что нам нужен документ nazvanie-posta

А теперь сравниваем 2 подхода:
0) в базе - русскоязычные записи:
нам нужно выбрать всё, к каждому применить транслитерацию, пока не найдём искомое
1) в базе - сразу транслит:
выбираем из базы строку (limit 1), совпадающую с нужной. Так же эффективен индекс, особенно - уникальный, что вполне не лишнее для этой задачи.

Вопросы?

Исключение:
Транслитерация полностью обратима, вы об этом помните и следите, в таком случае можно обратить транслит обратно в русскоязычный текст и выбрать по индексу из базы.

Как правило, удобнее хранить оба поля сразу, оригинальное для отображения и транслит для адресации.
7. Muxa - 18 Мая, 2012 - 22:15:34 - перейти к сообщению

я не он, но за него отвечу! намного лучше!!! Хорошо Радость

 

Powered by ExBB FM 1.0 RC1