2015-07-25 6 views
0

Я должен получить 20 последних товаров, заказанных по цене. Я использую этот запрос.MySQL получить последние 20 товаров по цене

SELECT * FROM products ORDER BY created_at DESC, price ASC LIMIT 20 
+0

Ваш запрос выглядит хорошо. Вы получаете какую-либо ошибку? –

+0

Я не получаю правильных результатов. это просто упорядочение по времени не по цене –

+0

Его заказывают их прежде всего по времени, а затем по цене. Измените порядок 'created_at' и' price' – amza

ответ

0

и можно попробовать автообъединение

SELECT p1.* FROM products AS p1 
INNER JOIN 
    (SELECT id 
    FROM products 
    ORDER BY created_at DESC LIMIT 20) AS p2 
ON p1.id = p2.id 
ORDER BY p1.price ASC 

Я не уверен, о присоединении к временным таблицам в Laravel запроса-строитель. По крайней мере, вы можете сделать это необработанным способом:

$results = DB::select(DB::raw(" 
    SELECT p1.* FROM products AS p1 
    INNER JOIN 
      (SELECT id 
      FROM products 
      ORDER BY created_at DESC LIMIT 20) AS p2 
     ON p1.id = p2.id 
    ORDER BY p1.price ASC 
")); 
+0

Будет работать, но не думаете ли вы, что это снизит производительность? –

+0

Я получаю эту ошибку. Ошибка синтаксиса или нарушение прав доступа: 1235 Эта версия MySQL еще не поддерживает «Подзапрос LIMIT & IN/ALL/ANY/SOME» –

+0

ответ обновлен. – M0rtiis

Смежные вопросы