2010-07-03 71 views
2

的計數確定值我有兩個表。門票&門票。 如果該項目已售罄,則售票表中售罄的字段需要爲1。 表票需要被索多特時用於表ticketlist該項目的計數爲2。根據該項目在

ticket 
ticketid, quantity, soldout 
21   2    1 

ticketlist 
ticketlistid, ticketid   
3     21 
4     21 

的邏輯是:

索多特應該是 '1',如果ticket.quantity - (COUNT(ticketlist。 ticketlistid)WHERE ticket.ticketid = ticketlist.ticketlistid)> 0

這是我試圖

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

任何幫助將理解MySQL的。

+0

總是很好,發佈你得到的錯誤。 – 2010-07-03 18:03:24

+0

「當表格票單中該項目的計數爲2時,需要銷燬表格票據。」 :我假設你在這裏說2,因爲數量是2? – 2010-07-03 18:17:38

+0

好吧,Kerry,會發布錯誤 – Nich 2010-07-03 18:19:31

回答

3

在你的子查詢:

  • 您應該只返回一列。
  • 不要選擇您的更新中已有的同一張表。

你可能還需要設置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; 

而且你的數據庫非規範化。您正在將信息存儲在一個表中,該表可以從另一個表中的數據派生。如果兩者不同步,則這種冗餘會導致錯誤。我建議只有在出於性能原因需要時才這樣做。

+0

謝謝馬克,這工作無縫 – Nich 2010-07-04 15:43:11

1

一個問題,我看到的是:

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

不過,您測試一個查詢的結果對"> 0",它返回ticketid和計數。你需要刪除ticket.ticketid。

+0

'> 0'比較也贏了如果更多的門票已經售出,而不是爲節目分配的數量。 – 2010-07-03 18:10:47

+0

是的,它實際上需要= 0 – Nich 2010-07-03 18:29:52

1

試試這個:

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

你的implementing this as a view越好,否則冒險索多特數不同步。

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 
+0

+1來指出同步問題。 – 2010-07-03 18:19:19

+1

+1爲觀點的想法。似乎沒有任何一點在一個表中存儲狀態信息,以獲取另一個表中已有的信息。 – Mike 2010-07-03 18:27:05