Mysql: Возможные ошибки в запросах "ГДЕ... В", ​​"ЗАКАЗАТЬ..." и "ЛИМИТ"

Как вы заметили, я поставил для этого вопроса двусмысленное название, поскольку просто не понимаю (из-за отсутствия глубоких знаний), является ли это истинной проблемой или нет.

Давайте начнем с краткого описания:

Здесь я выбираю свои продукты:

    $select_prod = "SELECT * FROM product WHERE product_id IN ($some_array)";

После этого вот где я определяю материал для разбивки на страницы:

    $query_page = mysql_query($select_prod);
    $product_total = mysql_num_rows($query_page);

            $page_rows = 4;
            $last = ceil($product_total/$page_rows);
            if ($page < 1) { 
               $page = 1; 
            } elseif ($page > $last) {
               $page = $last; 
            }
            $limit = 'limit ' .($page - 1) * $page_rows .',' .$page_rows;

И где я готовлю рендер

    $page_query = mysql_query($select_prod . $limit);   
    $results = array();
    while ($array_filter = mysql_fetch_array($page_query)) {
            $results[] = $array_filter;
            }

До этого момента все течет легко, и я перечисляю свои продукты так, как я хотел, НО в случайном порядке.

Я попытался включить "ORDER BY price ASC" в конце первого запроса, например:

    $select_prod = "SELECT * FROM product WHERE product_id IN ($some_array) ORDER BY price ASC";

но по непонятной причине не удается перечислить товары с ошибкой:

    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given...

Я уже несколько часов пытался выяснить, где может быть проблема, и этот форум, кажется, является последней попыткой для меня, после этого я позволю им сделать заказ, как они захотят.

1 ответ

Решение

Вам действительно нужно распечатать ваш полный запрос непосредственно перед выполнением. Попробуйте это вместо этого:

$select_prod = "SELECT * FROM product WHERE product_id IN ($some_array) ORDER BY price ASC ";

Или измените limit строка, чтобы иметь пробел перед limit,

Я считаю, что проблема заключается в нехватке места перед limit, Фрагмент in ()limit 100 действительный SQL. Фрагмент in () order by price asclimit 100 не является допустимым SQL.

Другие вопросы по тегам