alexander7779
@alexander7779
SEO, PHP (разработка на Laravel).

Как правильно передавать параметры id(mysql) не в url в CI?

Изучаю CI. Начал делать учебный проект, достал базу компаний и пробую.
В целом получилось сделать работающую систему. Но меня смущает, что почти все запросы строят на по полям с ключами, а varchar полями.
База не большая 2k записей, работает быстро. Но всё же как передать параметры ID не в URL
База автосалонов по РФ к примеру.
Как сделано - Пример:
Вид URL site.ru/russia/moskva
Находимся на странице города, тут отображены все автосалоны Москвы.
В модели запрос выглядит так.
...
$this->db->where('city_eng="'.$city.'"');
$query = $this->db->get('select_city_salon_preview')

...
$city - берётся из контроллера
$uri_segment_city = $this->uri->segment(2);
полный поиск по полям varchar.
т.е просто берётся из url (moskva) и полный скан по базе и вывод всех строк совпадений.
Прочитав книгу (Шварц Б., Зайцев П., Ткаченко В. и др. - MySQL. Оптимизация производительности (2-е издание))
ужаснулся. что я наделал. Хотя я выстроил индекс по городам. значения уникальны. Но всё же.

тоже самое, когда нахожусь на странице автосалона.
/russia/moskva/avtosalon-na-prospekte-123
в модели:
...
$this->db->where('name_eng="'.$firm.'"');
$query = $this->db->get('select_firm_info');

...
$firm - берём из контроллера
$uri_segment_firm = $this->uri->segment(3);

тоже полный поиск по полям varchar.

Можно ли при таком url, как-то использовать поиск по ключу в таблице?
постарался донести суть проблемы, если не понятно написал, скажите ещё попробую описать.
  • Вопрос задан
  • 247 просмотров
Решения вопроса 1
dmitriylanets
@dmitriylanets
веб-разработчик
я использую другой подход, принцип генерации ЧПУ, есть таблица которая хранит
ЧПУ адрес и чистые данные,
например таблица: url_chpu_data
url = /russia/moskva/avtosalon-na-prospekte-123
data =
[
'country_id' => 1,
'city_id' => 15,
'company'=>1
];
естественно в сериализованном виде хранится в базе, по url индекс
при заходе на НЕ ЧПУ адрес, например /?country_id=1&city_id=15&company=1
функционал определяет что нужно сгенерировать ЧПУ, получает из базы город, страну, компанию, переводит в транслит, формирует /russia/moskva/avtosalon-na-prospekte-123
и сохраняет в базе, запихнув значения GET запроса country_id,city_id,company в сериализованный массив.

при заходе на /russia/moskva/avtosalon-na-prospekte-123, находит запись в базе и заполняет GET массив полученными данными, заставляя работать функционал так же если бы был старый вариант ссылки
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
DmitryVoronkov
@DmitryVoronkov
Python Developer
Подсунь в урл, айди и вытаскивай по нему.
А вообще, если база маленькая и mysql не тормозит, то не парься. Как говорится: Работает - не трогай.
Ответ написан
Ваш ответ на вопрос

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

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