我有一个适用于“兑换代码”(架构:ID, NAME, USES, CODE
)的应用程序。例如"32, Stack Overflow, 75, 75%67-15hyh"
所以这个代码是给SO社区的,比方说,它有75个兑换。您可以通过输入一些运输信息和代码来兑换它。输入后,将执行此检查:
if (code exists){
if (count_entries_where_code=$code < $uses_set_at_creation){
//enter information into DB for processing
{
//echo "sorry, not a real code"
}
因此总使用次数是硬编码的,但是当前的兑换次数是使用SQL查询(count_results from entry_data WHERE code=$code
)生成的。这部分工作正常,但问题是:
在我管理代码的 view 页面,我有基本设置(在伪PHP中,,实际代码分为MVC设置):
$results = "SELECT * FROM codes";
foreach ($result as $code){
echo $code->code;
echo $code->name;
//etc. It's actually all in a nice HTML table.
}
所以我希望列出一个列表“代码中剩余的使用数量”。这样的东西应该存储在数据库中,并以这种方式绘制出来吗?使用foreach
循环生成会更容易,但我通常不喜欢存储“生成的”统计信息。有没有一种聪明的方法可以将这些结果放到使用foreach循环创建的表的正确行上?
(我对代码很好,所以我不需要一个工作/很好的语法示例,只是对可能适合这个问题的模式的解释,也许是对这类事情的常见设计的讨论。我是是否有权避免存储可生成的数据,例如剩余的使用数量等等。)
答案 0 :(得分:0)
运行查询以获取页面代码时,添加子查询以从entry_data表中获取已使用代码的数量。
select codes.id, codes.name, codes.uses, codes.code (select count(code) from entry_data where entry_data.code=codes.code ) as used_codes
Id使用code_id作为外键而不是代码。
这是假设我正在正确阅读您的问题
答案 1 :(得分:0)
我是否正确避免存储可生成数据,例如剩余的使用数量?
是的,你没有存储计算值是正确的 计算逻辑可以改变,并且使用存储的计算值对其进行逆向工程可能是一场噩梦 - 如果在某些情况下完全可能的话。
听起来你想要结合两个查询:
SELECT c.id,
c.name,
c.uses,
c.code,
x.num_used
FROM CODES c
JOIN (SELECT ed.code,
COUNT(*) 'num_used'
FROM ENTRY_DATA ed
GROUP BY ed.code) x ON x.code = c.code