是否有一个已知的标准来将SQL 逻辑编写成普通英语 以供非程序员理解?我生成的月度报告需要由客户验证,我认为我没有胆量将 SQL 塞进他的富人喉咙里。 :)
例如,这个:
SELECT cust.*
FROM sl_customers cust
LEFT JOIN sl_orders orders ON cust.id = orders.customer_id
WHERE
DATE_FORMAT(orders.delivery_date, '%Y-%m-%d') BETWEEN '2014-08-01' AND '2014-08-31'
AND DATE_FORMAT(cust.created, '%Y-%m-%d') BETWEEN '2014-08-01' AND '2014-08-31'
AND orders.status != 'cancelled'
AND cust.entry = 'New User'
AND cust.infosrc IN ('Ads - Newspaper', 'Ads - TV', 'Ads - Radio', 'Internet - Social Network')
最佳答案
这里主要是逐行翻译:
SELECT cust.*
获取客户信息...
FROM sl_customers cust
LEFT JOIN sl_orders orders ON cust.id = orders.customer_id
…对于每个订单(以及与订单的客户 ID 关联的客户),…
WHERE
DATE_FORMAT(orders.delivery_date, '%Y-%m-%d') BETWEEN '2014-08-01' AND '2014-08-31'
...订单的交货日期在 8 月 1 日至 31 日之间...
(旁白:这部分和下一部分可以更简单地用 SQL 编写为 orders.delivery_date BETWEEN '2014-08-01' AND '2014-08-31'
。你这里不需要 DATE_FORMAT()
。)
AND DATE_FORMAT(cust.created, '%Y-%m-%d') BETWEEN '2014-08-01' AND '2014-08-31'
...客户的创建日期在 8 月 1 日至 31 日之间...
AND orders.status != 'cancelled'
...订单状态不是“已取消”...
AND cust.entry = 'New User'
…客户输入的是“新用户”(不管那是什么?)…
AND cust.infosrc IN ('Ads - Newspaper', 'Ads - TV', 'Ads - Radio', 'Internet - Social Network')
…客户的 infosrc 是“广告 - 报纸”、“广告 - 电视”、“广告 - 广播”或“互联网 - 社交网络”。
关于mysql - 用普通英文写SQL代码,让非程序员也看得懂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25757144/