2014-12-30 5 views
3

У меня есть запрос, как это:ORDER BY идентификатор подчиненного запроса

SELECT i.* 
FROM items i 
WHERE i.id 
IN (
    SELECT c.item_id 
    FROM cart c 
    WHERE c.sessID=MY_SESSION_ID 
    ) 

Это прекрасно работает, но мне нужно, чтобы отсортировать элементы из телеги по дате покупки (cart.id) DESC. Я не хочу сортировать в PHP. Как я могу сортировать cart.id?

Я пробовал:

SELECT i.* 
FROM items i 
WHERE i.id 
IN (
    SELECT c.item_id 
    FROM cart c 
    WHERE c.sessID=MY_SESSION_ID 
    ) 
ORDER BY c.id 

Но это не так-то правильно.

+0

Почему вы не сортировать по 'I.ID'? – tvCa

ответ

1

Попробуйте этот запрос:

SELECT i.* FROM items i LEFT OUTER JOIN cart c 
ON i.id = c.item_id WHERE c.sessID=MY_SESSION_ID AND 
c.item_id is not null ORDER BY c.id 
1

Попробуйте это:

SELECT i.* 
FROM items i 
INNER JOIN cart c ON i.id = c.item_id 
WHERE c.sessID = MY_SESSION_ID 
GROUP BY i.id 
ORDER BY MAX(c.id) DESC; 

ИЛИ

SELECT i.* 
FROM items i 
INNER JOIN (SELECT item_id, MAX(id) AS cid 
      FROM cart 
      WHERE sessID = MY_SESSION_ID 
      GROUP BY item_id 
     ) AS c ON i.id = c.item_id 
ORDER BY c.cid DESC; 
2

Изменить свой Sub запрос к Inner Join. Sub query не позволит вам ссылаться на колонки за пределами sub query. Поэтому изменить его Inner join

SELECT i.* 
FROM items i 
     JOIN (SELECT item_id, 
        id 
      FROM cart) C 
     ON i.id = c.item_id 
      AND c.sessID = MY_SESSION_ID 
ORDER BY c.id Desc 

или использовать это.

SELECT i.* 
FROM items i 
     JOIN cart C 
     ON i.id = c.item_id 
      AND c.sessID = MY_SESSION_ID 
ORDER BY c.id Desc 
+0

Вы должны передать это условие в подзапрос ** c.sessID = MY_SESSION_ID ** –

+0

@SaharshShah - Не нужно. Я присоединился к нему. –

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