#php #mysql #time #timetable
#php #mysql #время #расписание
Вопрос:
Я использовал этот код:
$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 amp; 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)
)
;";
но это просто выводит адрес / электронную почту и т.д. дважды.
Не мог бы кто-нибудь указать, что я делаю неправильно, пожалуйста?
Спасибо за любую помощь
Редактировать: сейчас я это исправил, просто использовал 2-й запрос и цикл if / else.
Ответ №1:
Я бы не назвал себя экспертом, и ваши объединения выглядят очень сложными, но по моему опыту, если вы получаете дубликаты в своем запросе, значит, вы неправильно сгруппированы, и я вообще не вижу GROUP BY в вашем запросе.
Надеюсь, это поможет.
Кстати… откуда у вас исходные данные о государственных праздниках? В данный момент я ищу точно то же самое, что и то, как я наткнулся на этот пост.
Комментарии:
1. Привет, Дэйв, один из наших сотрудников просматривает все веб-сайты посольства и собирает данные вручную.
Ответ №2:
Использовал 2-й запрос и цикл if / else, и он работает так, как я хотел.