2009-06-01 102 views
1

我有一個MySQL表,它有價格請求,它有日期,第一,最後和product_id字段。產品品牌可以從product_id的產品表中找到。PHP:跟蹤用戶和產品品牌的請求?

給定一個日期範圍,他們想要知道日期範圍內每天的人員和品牌的請求總數,以及日期範圍內的總數。這是一個棘手的部分,如果同一人在一天內多次提出請求,那麼對於人來說,它只會計爲1。但是如果一個人在一天之內提出了兩個不同品牌的請求,那麼每個品牌在當天就會獲得1個。但是如果他們在一天內提出品牌多重要求,那麼該品牌僅在當天就算爲1。

例如,可以說在給定的日期,John Doe對Burberry產品和2個施華洛世奇產品提出了3個價格要求。那隻會計人1,burberry的1,施華洛世奇1。但是,如果另一個人提出了burberry的要求,那麼當天就會有2個burberry,而那天會有2個人。

我希望這樣做以來。無論如何,最好的辦法是做什麼?我正在使用PHP4和MySQL4

謝謝!

+0

作業「,這不是功課!這是我爲我工作的公司工作的一個實際項目。 – 2009-06-01 18:38:03

回答

0

注意:由於您沒有爲您的表提供SQL DDL,因此我創建了此表。給我一些意見,我會編輯答案,直到我們做對了。

CREATE TABLE priceRequestsProducts AS (
    userId INT NOT NULL, 
    productId INT NOT NULL, 
    date DATE NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    INDEX(userId), 
    INDEX(productId), 
    PRIMARY KEY (userId, productId, date), 
    CONSTRAINT fk_prp_users FOREIGN KEY (userId) REFERENCES (Users.id), 
    CONSTRAINT fk_prp_products FOREIGN KEY (productId) REFERENCES (Products.id) 
) ENGINE=InnoDb; 

-- # Shows all dates each user has made a priceRequest for at least one product: 
SELECT U.userId, U.firstName, U.lastName, U.username, date 
FROM Users U 
JOIN priceRequestsProducts as prp ON u.id = prp.id 
GROUP BY prp.userId, prp.date; 

-- # Shows number of price requests for a product on all dates 
SELECT P.id, P.name, count(1) as numRequests, prp.date 
FROM Products P 
JOIN priceRequestsProducts prp ON prp.productId = P.id 
GROUP BY prp.productId, prp.date; 
1

假設機的表定義,嘗試

-- # Shows number of people doing a request per day 
SELECT 
    Count(DISTINCT userId) AS NumberOfUsers, 
FROM 
    priceRequestsProducts prp, 
    date 
GROUP BY 
    prp.date; 

-- # Shows number of request for a given product per day 
SELECT 
    Count(DISTINCT userId) AS NumberofUsers, 
    productId, 
    date 
FROM 
    priceRequestsProducts prp 
GROUP BY 
    prp.date, prp.productId; 

這是不可取的在查詢中使用。對於人來說,你會期望每天有一行,對於你期望產品每行有一行(產品,日期)的產品。如果你真的想這樣做,介紹不作爲的productId值(我會做的productId UNSIGNED INT NOT NULL AUTO_INCREMENT),或者使用NULL,並用它來指定用戶:有誰加入此爲「

SELECT 
    Count(DISTINCT userId) AS NumberOfUsers, 
FROM 
    priceRequestsProducts prp, 
    NULL, 
    date 
GROUP BY 
    prp.date; 
UNION ALL 
SELECT 
    Count(DISTINCT userId) AS NumberofUsers, 
    productId, 
    date 
FROM 
    priceRequestsProducts prp 
GROUP BY 
    prp.date, prp.productId; 
相關問題