这是我的表结构的模型。三张桌子。
---------------- ---------------------------- -------------------------------
|possibilities | |realities | |measurements |
|--------------| |--------------------------| |-----------------------------|
|pid| category | |rid | pid | item | status | |mid | rid | meas | date |
|--------------| |--------------------------| |-----------------------------|
|1 | animal | |1 | 1 | dog | 1 (yes)| |1 | 1 | 3 | 2012-01-01|
|2 | vegetable| |2 | 1 | fox | 1 | |2 | 3 | 2 | 2012-01-05|
|3 | mineral | |3 | 1 | cat | 1 | |3 | 1 | 13 | 2012-02-02|
---------------- |4 | 2 | apple| 2 (no) | |4 | 3 | 24 | 2012-02-15|
|5 | 1 | mouse| 1 | |5 | 2 | 5 | 2012-02-16|
|7 | 1 | bat | 2 | |6 | 6 | 4 | 2012-02-17|
---------------------------- -------------------------------
我所追求的是一个结果,它将根据“可能性”表中特定条目的测量范围向我显示一系列计数,其中相关“现实”的状态为 1(意味着它当前正在被跟踪),但是唯一相关的测量是最近的测量。
这是我正在寻找使用动物作为可能性的示例结果。
-----------------------
| 0-9 | 10-19 | 20-29 |
|---------------------|
| 2 | 1 | 1 |
-----------------------
所以,在这个例子中,苹果行没有被用来计数,因为它不是动物,蝙蝠也没有被用来计数,因为它的状态被设置为 no(意思是不测量),并且只使用了最近的测量值来确定计数。
我目前在我的实际使用中有一个解决方法,但它没有遵循良好的数据库规范化。在我的现实表中,我有一个 current_meas 列,当进行新的测量并将其输入测量表时,该列会更新。然后我只需要使用前两个表,我有一个 SELECT 语句,其中包含一堆嵌入的 SUM 语句,例如使用 IF 值在 0-9 之间。它给了我想要的东西,但是我的应用程序已经发展到这种便利在其他领域成为问题的地步。
所以,问题是,有没有一种更优雅的方法可以在一个语句中做到这一点?子选择?临时表?获得计数是该应用程序的核心。
这是一个基于 PHP5、MySQL5、JQuery 1.8 的 web 应用程序,以防给我更多选择。提前致谢。我喜欢堆栈,并希望能提供尽可能多的帮助。