我在标准商店中有以下表格:
(id
始终为主键,自动递增,ts
始终为TIMESTAMP
,更新为ON_UPDATE CURRENT_TIMESTAMP)
表sales
:
id | total | tendered | flag | userID | ts
1 0.6 0.6 0 4 2013-11-21 08:12:23
Sales
是父表,userID
与进行销售的用户相关。 total
和tendered
都属于FLOAT类型。 flag
的类型为VARCHAR,可以是Free Order
。
表receipts
:
id | oID | pID | quantity | ts
1 1 26 1 2013-11-21 08:11:25
Receipts
为每种独特类型的产品保留一条线。 oID
是INT类型,与表id
的{{1}}相关。 sales
的类型为INT,与表pID
的{{1}}相关。
表id
:
products
products
是数据库中每个产品的中心数据。这是火星酒吧的一条线。 id | name | price | cID | display | ts
1 Mars 0.6 3 1 2014-01-17 07:55:25
与表Products
中的cID
相关。
表id
categories
categories
是包含每个类别的所有数据的表格,可以包含与单行相关的多个产品。 id | name | display | ts
3 Snacks 1 2013-11-14 12:06:44
的类型为INT,并指示何时启用或禁用类别(1 ='true')
我的问题是,我想输出这样的信息:
Categories
我有以下SQL:
display
这似乎给了我正确的信息,但我并非100%肯定。如果有人能证实这是有效的,我将非常感激。但是当我想看到某一天时,我会得到不同寻常的数字:
**Snacks**
(name) (quantity) (price) (total)
Fruit 3 50p £1.50
Twix 1 60p 60p
Boost 1 60 60p
**Hot Drinks**
(name) (quantity) (price) (total)
English Tea 15 60p £9.00
Speciality Teas 2 60p £1.20
( function'select'只返回SQL表的数组)。问题是,我可以通过在PHP中循环并以这种方式添加它来轻松找到结果。但我知道这可能与SQL,我只是不知道为什么它不工作。有人可以帮忙吗?
编辑 SQL示例小提琴在这里:http://sqlfiddle.com/#!2/23af4虽然由于8000个字符的限制我无法完成超过半天的数据。
答案 0 :(得分:2)
试试这个:
SELECT categories.name AS category, products.name AS name,
receipts.quantity AS quantity, products.price AS price,
(receipts.quantity * products.price) AS total
FROM categories
JOIN products
ON categories.id = products.cID
JOIN receipts
ON receipts.pID = products.ID
WHERE DATE(receipts.ts) = CURDATE()
ORDER BY categories.name
关于日期限制,您可以使用BETWEEN ... AND ...来指定日期和时间。使用绝对日期和时间或相对于当前日期和时间,例如WHERE DATE(receipts.ts)BETWEEN concat(curdate()-5,'6:00:00 AM')和curdate()-4 < / p>