【发布时间】:2012-05-14 16:07:47
【问题描述】:
这是我的表结构模型。三张桌子。
---------------- ---------------------------- -------------------------------
|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 应用程序,以防我提供更多选择。提前致谢。我喜欢堆栈,并希望能提供尽可能多的帮助。
【问题讨论】:
标签: mysql select count temp-tables subquery