PHP: kullanıcı tarafından ve ürün markası istekleri izlemek?

2 Cevap php

Ben fiyat istekleri olan bir MySQL tablo var, bu son, ilk, tarihi vardır, ve product_id alanlar. Ürün markası product_id gelen ürün tablodan bulunabilir.

Bir tarih aralığı göz önüne alındığında, toplam tarih aralığında her gün için insanlar tarafından ve marka istekleri sayısını ve tarih aralığındaki toplam bilmek istiyorum. Aynı kişinin daha günde bir kez daha bir istek yaparsa Burada, zor bir parçasıdır, o zaman sadece insanlar için 1 olarak sayar. Bir kişi 1 günde 2 farklı markalar için bir istekte Ama eğer, her marka o gün için 1 alır. ama onlar bu marka sadece o gün için 1 sayılır alır, tek bir gün içinde bir marka mulitples için bir istekleri yaparsanız.

Örneğin John Doe Burberry ürün için 3 fiyat istekleri ve 2 swarovski yapılan ürünlerin belirli bir tarihte Diyelim ki. Bu sadece Burberry için, insanlar için 1 1 saymak ve swarovski için 1 olacaktır. Başka bir kişi Burberry için bir istekte Ama eğer o gün için o gün ve 2 kişi için 2 burberry olacaktır.

Ben bu yana yapar umuyoruz. Her neyse bunu yapmak için en iyi yolu nedir? Ben PHP4 ve MySQL4 kullanıyorum

Teşekkürler!

2 Cevap

Makine tablo tanımını varsayarak, denemek

-- # 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;

Bu sorguda kullanmak arzu değildir. Insanlar için, size çifti başına bir satır (ürün, gün) beklediğiniz ürünler için, günde bir satır beklenebilir. Eğer gerçekten bunu istiyorsanız, (ben productId'den UNSIGNED INT NOT NULL AUTO_INCREMENT yapacak) veya NULL kullanın ve kullanıcıları belirlemek için kullanabilirsiniz bir productId olarak kullanılan bir değeri tanıtmak:

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;

Not: Eğer tablolar için SQL DDL vermedi çünkü ben, bu tabloyu yaptı. Bana bazı yorumlar vermek ve bunu doğru elde edene kadar ben cevap düzenlemek edeceğiz.

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;