0

我一直在使用这段代码:

 $rawsql = "SELECT 
*
FROM 
    _erc_foffices n 
INNER JOIN 
    _erc_openings o ON n.id = o.branch_id AND o.dotw = DAYOFWEEK(CURRENT_DATE()) 
INNER JOIN 
    _erc_openings_times t ON o.id = t.opening_id
WHERE 
(
    UNIX_TIMESTAMP(CURRENT_TIMESTAMP()) BETWEEN UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.open)) AND UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.close)) 
) 
AND 
(
    n.id = %d
)
;";

$sql = sprintf($rawsql, mysql_real_escape_string($id));

$result = mysql_query($sql);

/*These if & while statements decide whether or not the information should be displayed. If no results are returned from the query above then an alternative message is shown.*/

if(mysql_num_rows($result) > 0) {
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {

        echo "<div class='address'><p>" . $row["title"] . "<br/>";
        echo $row["address_1"] . "<br/> " . $row["address_2"] . "<br/> " . $row["address_3"] . "<br/> " . $row["address_4"] . "<br/> " . $row["address_5"] . "</p>";
        echo "<div class='buttons'><img src='http://localhost/erc/images/texttouser_button.png'/><br/><a href='" . $row["url"] . "' target='blank'><img src='http://localhost/erc/images/website_button.png'/></a></div></div>";
        echo "<div class='email'>" . $row["email"] . "</div>";
        $extra_notes = $row["extra"];

    }
} else {

        $embassy_closed = mysql_query("SELECT * FROM _erc_foffices WHERE id = '$embassy_id'");

        while($row = mysql_fetch_array($embassy_closed))
                      {

        echo "<div class='address'><p>" . $row["title"] . "<br/>";
        echo $row["address_1"] . "<br/> " . $row["address_2"] . "<br/> " . $row["address_3"] . "<br/> " . $row["address_4"] . "<br/> " . $row["address_5"] . " <font color='red'>The embassy is closed.</font></p>";
        echo "<div class='buttons'><img src='http://localhost/erc/images/texttouser_button.png'/><br/><a href='" . $row["url"] . "' target='blank'><img src='http://localhost/erc/images/website_button.png'/></a></div></div>";
        echo "<div class='email'>" . $row["email"] . "</div>";
        $extra_notes = $row["extra"];


                      }


}

它从数据库中获取大使馆的开放时间,并决定大使馆当前是否开放。如果不是,则会显示一条消息“大使馆已关闭”。现在我需要添加公共假期,所以我将查询更改为如下所示:

    $rawsql = "SELECT 
    *
    FROM 
        _erc_foffices n 
    INNER JOIN 
        _erc_openings o ON n.id = o.branch_id AND o.dotw = DAYOFWEEK(CURRENT_DATE()) 
    INNER JOIN 
        _erc_openings_times t ON o.id = t.opening_id
        LEFT JOIN 
    _erc_holidays h ON h.branch_id = n.id
    WHERE 
    (
        UNIX_TIMESTAMP(CURRENT_TIMESTAMP()) BETWEEN UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.open)) AND UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.close)) 
    ) 
    AND 
    (
        n.id = %d
    )
        AND
(
    UNIX_TIMESTAMP(CURRENT_TIMESTAMP()) 
    NOT BETWEEN UNIX_TIMESTAMP(h.begins_at) AND UNIX_TIMESTAMP(h.ends_at)
)
        ;";

但这只会输出地址/电子邮件等两次。

有人可以指出我做错了什么吗?

谢谢你的帮助

编辑:我现在已经解决了这个问题,只使用了第二个查询和 if/else 循环。

4

2 回答 2

0

我不会自称是专家,您的联接看起来非常复杂,但根据我的经验,如果您的查询中有重复项,那么您没有正确分组,我在您的查询中根本看不到 GROUP BY .

希望有帮助。

顺便说一句……您的公共假期数据是从哪里获取的?我现在正在寻找完全相同的东西,这就是我遇到这篇文章的方式。

于 2011-04-13T10:56:56.513 回答
0

使用了第二个查询和 if/else 循环,它按我的意愿工作。

于 2011-04-18T08:11:07.050 回答