我已经编写了一个在Prestashop 1.6模块中使用的查询,但惊讶地发现LIMIT
在查询中不起作用。该计划是获得最畅销的十大产品。
我已经在phpMyAdmin中对其进行了测试,它可以完美运行,但是在应用程序中不起作用。以下是查询。
$sql = 'SELECT id_product, sale_nbr
FROM '._DB_PREFIX_.'product_sale
WHERE id_product = '.(int)$id_product.'
ORDER BY sale_nbr DESC LIMIT 10';
return Db::getInstance()->executeS($sql);
我也尝试过LIMIT 0, 10
没有错误消息LIMIT
根本不起作用。在我的测试示例中,列表中的50种产品中有15种是最畅销的,但是我只想展示其中10种,但总以15种出现。
答案 0 :(得分:0)
也许尝试嵌套:
sql = 'SELECT id_product, sale_nbr FROM (
SELECT id_product, sale_nbr
FROM '._DB_PREFIX_.'product_sale
WHERE id_product = '.(int)$id_product.'
ORDER BY sale_nbr DESC LIMIT 10 ) t1';
答案 1 :(得分:0)
这完全取决于您用来执行查询的内容。 使用:
- Db::getInstance()->getValue($sql) => Returns 1 result
- Db::getInstance()-> getRow($sql) => Returns an array with the first result line
- Db::getInstance()-> executes($sql) => Returns an array of results
使用第三种方法,您应该可以使用限制;这里的更多信息:https://www.prestashop.com/fr/blog/les-bonnes-pratiques-de-la-classe-db-sur-prestashop-1-5
此致
答案 2 :(得分:0)
要获得十大最畅销产品:
$sql = new DbQuery();
$sql->select('SELECT id_product, sale_nbr');
$sql->from('product_sale', 'ps');
$sql->orderBy('`sale_nbr` DESC');
$sql->limit(10);
return Db::getInstance(_PS_USE_SQL_SLAVE_)->executes($sql);