2009-09-25 99 views
1

對於第一個表中的每個項目,都有一個'numberOf'字段。該字段的值在相關表中必須具有相同的行數。這些就像保留行一樣,因此多個用戶可以同時預訂該項目。這種syncronisation有時會消失,並且比'numberOf'字段變量更多的行,反之亦然。將數據庫值與另一個表中的行數進行比較

所以我想顯示一個表,輸出第一個表中的'numberOf',以及從另一個表中對應的行數。它們通過項目ID鏈接。希望這不是太混亂。查詢以do while循環輸出。以下是我至今仍在查詢的內容:

$querySync = sprintf("SELECT 
          COUNT(reserve_id), item_id, details, numberOf 
         FROM 
          reservations  
         JOIN 
          items ON item_id = itemID_reserved      
         WHERE 
          itemID_reserved = 1 "); 

所以目前它計算保留表中的行數。然後它加入物品表,所以我可以顯示說明和numberOf等。當然,目前它只輸出ID爲1的物品。但我似乎無法讓它通過每個物品,檢查其編號,並且將其與預訂表中的行數進行比較。

這個想法是把它全部放在一個列上,如果它不同步等行打印結束,我需要重建預訂表中的行以匹配numberOf。

對不起,這是一個很長的!

+0

你爲什麼要存儲計算值?由於計算該值所需的數據已經存儲在數據庫中,因此實際上可以將事物標準化。對於彙總表來說這可能是可以接受的,但通常不被認爲是好的做法。 – dnagirl 2009-09-25 15:12:03

+0

dnagirl提供了一個絕佳的觀點 - 這是您嘗試存儲彙總值時創建的問題。 – TML 2009-09-25 15:14:28

+0

我認爲'numberOf'是可能的最大保留數量,而不是實際的數量,這就是'@ op'想要比較的。 – Quassnoi 2009-09-25 15:14:46

回答

1
SELECT COUNT(reserve_id), item_id, details, numberOf, 
     COUNT(reserve_id) > numberOf AS overbook 
FROM items 
LEFT JOIN 
     reservations 
ON  itemID_reserved = item_id 
GROUP BY 
     item_id 
0

可能更容易只是直接計算出哪些項目是「不同步」:

select i.item_id 
from reservations r JOIN items i on (i.item_id = r.itemID_reserved) 
group by i.item_id 
having count(r.itemID_reserved) > i.numberOf 

我正在做一些假設有哪些表有哪些字段,但它應該是足夠說明。

相關問題