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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Скорость работы

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
etoYA
Отправлено: 17 Мая, 2012 - 22:34:31
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




Название темы придумать не смог, в общем дело такое. У меня для ЧПУ будет транслитерироватся название поста. Как лучше сделать:

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.  
 
 Top
OrmaJever Модератор
Отправлено: 17 Мая, 2012 - 22:43:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




суть вопроса на каком языке записывать в бд? Русский или транслит? Однако


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
etoYA
Отправлено: 17 Мая, 2012 - 22:47:10
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




OrmaJever, изначально русский.

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

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

Что лучше, сразу записывать транслитерированое название, или при выборке преобразовывать?
 
 Top
OrmaJever Модератор
Отправлено: 17 Мая, 2012 - 23:22:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




etoYA а раззница? Если захотите хранить оригинал и преобразовать при выводе бещ проблем, а если захотите хранить русский, то при выводе всегда можно перевести обратно в транслит по таблице, разницы вобще никакой, темболее как написано в заголовке "скорость работы". Это вобще вопрос в удобности и проэктировании.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
etoYA
Отправлено: 17 Мая, 2012 - 23:30:14
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




OrmaJever, спасибо. Если только в удобстве, то вариант 1) имхо удобней)
 
 Top
Мелкий Супермодератор
Отправлено: 18 Мая, 2012 - 09:46:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Исходные данные:
0) пришёл запрос http://example[dot]com/nazvanie-posta
1) выясняем, что нам нужен документ nazvanie-posta

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

Вопросы?

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

Как правило, удобнее хранить оба поля сразу, оригинальное для отображения и транслит для адресации.


-----
PostgreSQL DBA
 
 Top
Muxa
Отправлено: 18 Мая, 2012 - 22:15:34
Post Id



Частый гость


Покинул форум
Сообщений всего: 247
Дата рег-ции: Март 2012  
Откуда: Россия, Тверь


Помог: 5 раз(а)





я не он, но за него отвечу! намного лучше!!! Хорошо Радость
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB