1

我有一个 MySQL 查询,用于检查员工计划数据库,并且(感谢之前的 stackoverflow 问题)返回用户不工作的任何日期为“不工作”,因此如果用户在星期四不工作,则查询填充即使该日期没有出现在原始结果集中(因此我不必通过 PHP 脚本填写这些空白)。

现在的问题是,如果用户在两周后查看日程安排,则整周都显示“无工作”。如果没有结果,脚本应该输出“对不起,本周没有发布时间表”,这样用户就不会被误导以为他有一周的休息时间并且知道稍后再回来查看。

所以问题是:什么是最好的查询语法,例如:

SELECT 
If Count(*) > 0 {
COALESCE(gooddata, nulldata) AS thedata
etc.
etc.
FROM sched_table
WHERE dates BETWEEN xxx AND yyy

因此,如果所有行都为空(或计数为 0),它不会返回任何行。

我尝试添加一列进行计数并让脚本输出“未发布”并在一次迭代后退出,但在好几周后它仍然在一次迭代后退出,所以我很沮丧。

我敢肯定,如果我退后一步,我可以让脚本做我想做的事,但我很好奇是否有办法在查询中做到这一点,以便至少有一行用于合并其他空行的非 Null 值。

4

3 回答 3

2

实际上,我认为使用数据库进行行级格式化/条件输出操作可能会走得太远。PHP 在进行字符串比较和算术运算方面实际上比 MySQL 快得多。与我合作过的开发人员之间的不成文政策一直是我们不使用数据库来格式化我们的输出,我认为你正在通过你在这里所做的事情进入那个领域。

我很想知道其他人是否同意这个建议。我实际上可能会将它作为一个新问题发布......在他们使用数据库格式化输出时,他们在哪里划清界限?

于 2009-07-23T13:20:21.677 回答
2

哦不,有两个内部选择的连接,其中一个是有条件的?你是认真的吗?用一个简单的 UNION 来填空怎么样?:) 就像是

SELECT real_week_data UNION SELECT fake_empty_week;

这个 UNION 甚至会为您提供独一无二的结果,为您提供您想要的。

于 2011-05-06T07:47:15.263 回答
0

很可能您的查询与某种行集连接以生成一周中的所有日期。

在该行集中添加一个条件:

SELECT  COALESCE(gooddata, nulldata) AS thedata
FROM    (
        SELECT  *
        FROM    days_of_week
        WHERE   EXISTS
                (
                SELECT  NULL
                FROM    sched_data
                WHERE   dates BETWEEN xxx AND yyy
                )
        )
LEFT OUTER JOIN
        sched_data
WHERE   dates BETWEEN xxx AND yyy
于 2009-07-23T14:14:16.290 回答