代码之家  ›  专栏  ›  技术社区  ›  Nich

基于中该项的计数确定值

  •  2
  • Nich  · 技术社区  · 16 年前

    我有两张桌子。门票和;票证列表。 当表ticketlist中该项的计数为2时,需要解决表ticket。

    ticket
    ticketid, quantity, soldout  
    21          2             1 
    
    ticketlist
    ticketlistid, ticketid          
    3                 21
    4                 21
    

    逻辑是:

    如果ticket.quantity-(COUNT(ticketlist.ticketlisted)WHERE ticket.ticketid=ticketlist.ticketlisted)>0

       UPDATE ticket
        SET soldout = '1'
        WHERE quantity - (SELECT ticket.ticketid, COUNT(ticketlist.ticketlistid)
                FROM ticket, ticketlist
                WHERE ticket.ticketid = ticketlist.ticketid) > '0';
    

    任何帮助都将不胜感激。

    4 回复  |  直到 16 年前
        1
  •  3
  •   Mark Byers    16 年前

    在您的子选择中:

    你可能还想 sold_out quantity - (SELECT ...) <= 0 ,而不是 > 0

    将查询更改为:

    UPDATE ticket
    SET soldout = '1'
    WHERE quantity - (
        SELECT COUNT(ticketlist.ticketlistid)
        FROM ticketlist
        WHERE ticket.ticketid = ticketlist.ticketid
    ) > 0;
    

        2
  •  2
  •   OMG Ponies    16 年前

    你比我强 implementing this as a view ,否则可能导致soldout号不同步。

    CREATE VIEW vw_tickets AS
        SELECT t.ticketid,
               t.quantity,
               COUNT(*) AS sold,
               CASE 
                 WHEN t.quantity = COUNT(*) THEN 1 
                 WHEN t.quantity < COUNT(*) THEN -1 -- oversold
                 ELSE 0 
               END AS soldout
          FROM TICKET t
     LEFT JOIN TICKETLIST tl ON tl.ticketid = t.ticketid
      GROUP BY t.ticketid, t.quantity
    
        3
  •  1
  •   dcp    16 年前

    (SELECT ticket.ticketid, COUNT(ticketlist.ticketlistid)
                FROM ticket, ticketlist
                WHERE ticket.ticketid = ticketlist.ticketid) 
    

    您正在对该查询的结果进行测试 "> 0" 但是,它返回ticketid和count。您需要删除ticket.ticketid。

        4
  •  1
  •   Kerry Jones    16 年前

    UPDATE `ticket`
    SET `soldout` = 1
    WHERE `ticketid` IN ( 
        SELECT `ticketid` FROM `ticketlist` GROUP BY `ticketid` HAVING COUNT(`ticketlistid`) = 2 )