@nata32

Почему запрос возвращает пустоту?

Написала запрос
ЗАПРОС
$sql = "SELECT p.product_id, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id";
        $sql .= " AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW())";
        $sql .= " AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special";
       	$sql .= " FROM " . DB_PREFIX . "product_to_category p2c";
        $sql .= " LEFT JOIN " . DB_PREFIX . "product p ON (p2c.product_id = p.product_id)";
        $sql .= " LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id)";
        $sql .= " LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id)";
        $sql .= " WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1'";
        $sql .= " AND p.quantity > 0 AND image IS NOT NULL AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'";
        $sql .= " AND p2c.category_id = '" . (int)$data['filter_category_id'] . "'";
        $sql .= " GROUP BY p.product_id";
        $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
        $query = $this->db->query($sql);

но он не отрабатывает, возвращает пустоту, если убрать строку
$sql .= " AND p2c.category_id = '" . (int)$data['filter_category_id'] . "'";

то выборка работает но нет фильтрации по категории, что неправильно написано ?
ID категории в $data['filter_category_id'] передается, в таблице product_to_category товары по данной категории есть.
  • Вопрос задан
  • 94 просмотра
Пригласить эксперта
Ответы на вопрос 2
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Если запрос выполняется без ошибок но не возвращает ни одной строки, это значит что в БД отсутствуют данные, подходящие под указанные в запросе условия.
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
выводите свой запрос в строчку:
$sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
var_dump($sql); exit;
$query = $this->db->query($sql);
Идете в пхпмайадмин или консоль мускуля, вставляете и выполняете. Хотя для начала убедитесь что все вставленные значения хоть как-то похожи на правду.
Смотрите что наотвечал вам сервер, если ответ вернул нифига - смотрите глазками что может быть не так с условиями в запросе, например какие из предоставленных данных точно отсутствуют в бд, или какие условия в энд противоречат друг другу... В конце концов начинайте удалять условия по одному, чтобы определить какое условие портит всю малину, затем думайте почему, есть ли данные удовлетворяющие этому условию в полученных результатах...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
30 апр. 2024, в 15:24
3000 руб./за проект
30 апр. 2024, в 15:11
500 руб./в час
30 апр. 2024, в 15:11
5000 руб./за проект