@nikkon82

Как задать правильный запрос к БД?

Подскажите как правильно задать запрос к БД?

Надо для фильтрации вытащить только те значения, которые указаны в фильтре - $data['filter_name'], $data['filter_mapcat'], $data['filter_status']. По имени и статусу все нормально выдает, но по Категории не хочет.

Код запроса:
$sql = "SELECT sp.*, spd.title, (SELECT cd.name FROM " . DB_PREFIX . "category_description cd WHERE cd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND cd.category_id = sp.mapcat_id) AS category FROM " . DB_PREFIX . "seotags_page sp LEFT JOIN " . DB_PREFIX . "seotags_page_description spd ON (sp.seotags_page_id = spd.seotags_page_id) WHERE spd.language_id = '" . (int)$this->config->get('config_language_id') . "'";

		if (!empty($data['filter_name'])) {
			$sql .= " AND spd.title LIKE '" . $this->db->escape($data['filter_name']) . "%'";
		}
		
		if (!empty($data['filter_mapcat'])) {
			$sql .= " AND category LIKE '%" . $data['filter_mapcat'] . "%'";
		}
		
		if (isset($data['filter_status']) && $data['filter_status'] !== '') {
			$sql .= " AND sp.status = '" . (int)$data['filter_status'] . "'";
		}
		
		$sql .= " GROUP BY sp.seotags_page_id";


Проблема именно вот в этих строках:
if (!empty($data['filter_mapcat'])) {
			$sql .= " AND category LIKE '%" . $data['filter_mapcat'] . "%'";
		}


Какой запрос здесь правильно написать?
  • Вопрос задан
  • 53 просмотра
Пригласить эксперта
Ответы на вопрос 2
flapflapjack
@flapflapjack
на треть я прав
В таких случаях всё очень просто - сделайте дамп SQL запроса, и посмотрите, что происходит.

Напишите после вашего кода сразу -
die($sql);

и вы увидите в чём ошибка.
Да и мы бы не отказались посмотреть на дамп.
Ответ написан
Комментировать
@CHolfield
Вместо category в указанном месте должно быть cd.name
if (!empty($data['filter_mapcat'])) {
      $sql .= " AND cd.name LIKE '%" . $data['filter_mapcat'] . "%'";
    }
Ответ написан
Ваш ответ на вопрос

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

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