【问题标题】:ORDER BY id IN SubqueryORDER BY id IN 子查询
【发布时间】:2014-12-30 11:45:38
【问题描述】:

我有一个这样的查询:

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 

但它没有正确排序。

【问题讨论】:

  • 你为什么不对I.ID排序?

标签: sql select join subquery sql-order-by


【解决方案1】:

将您的子查询更改为Inner JoinSub 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

【讨论】:

  • 你必须在子查询中传递这个条件 c.sessID = MY_SESSION_ID
  • @SaharshShah - 不需要。我已经加入了。
【解决方案2】:

试试这个查询:

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 

【讨论】:

    【解决方案3】:

    试试这个:

    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;
    

    【讨论】:

      猜你喜欢
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多