gpt4 book ai didi

php - 使用中间sql表不好吗

转载 作者:行者123 更新时间:2023-11-29 03:19:38 24 4
gpt4 key购买 nike

我有一个包含假期的数据库表,即圣诞节、复活节、联合国日不同的斋戒日以及回历(穆斯林)、希伯来(犹太)和中国日历的庆祝事件。

所有假期都保存在它们在自己的日历中出现的日期。但并非所有日子都在特定日期庆祝。一个例子是四个降临节星期日,第四个星期日是在 12 月 18 日和 24 日之间的一个星期日。

还有其他考试,例如在荷兰,一些庆祝事件的日子会移到星期天。

当谈到禁食时,他们可以有不同的长度,至少在瑞典的新教教会中也有周日弥撒,如果发生更重要的弥撒,就会被排除在外。

So my table is set up as follows:

实际 SQL 的 PHP,注意它遍历所有日历。

foreach ($kal as $kalender => $arr_date) {
$go_Y = (int)$arr_date['go']['Y'];
$go_m = (int)$arr_date['go']['m'];
$go_d = (int)$arr_date['go']['d'];

$end_Y = (int)$arr_date['end']['Y'];
$end_m = (int)$arr_date['end']['m'];
$end_d = (int)$arr_date['end']['d'];

$sql = "SELECT
id,
name,
IF (picture_link = '', type_image, picture_link) AS logo,
start_year,
start_month,
start_day,
end_year,
end_month,
end_day,
year_interval,
start_weekday,
shift,
period,
ends_with_holiday,
has_php,
is_type,
in_calendar,
begins_year,
first_year,
bank_holiday,
has_note,
source_link,
COUNT(flagday_id) AS flagdays,
flagday_for_contry, /* if for only one contry, othervise an extra SQL is needed */
flagday_type,
flagday_information,
flagday_source
FROM holiday
LEFT JOIN type ON (type.id = holiday.is_type)
LEFT JOIN flagday ON (holiday.id = flagday_for_holiday)
WHERE is_calendar = $kalender

AND (start_year IS NULL OR start_year <= $end_Y)
AND (end_year IS NULL OR end_year >= $go_Y)

AND IF($end_m < $go_m OR ($end_m = $go_m AND $end_d < $go_d), /* If over new years */
(start_month < $end_m OR start_month = $end_m AND start_day <= $end_d)
OR (end_month > $go_m OR end_month = $go_m AND end_day >= $go_d)

, /* ELSE, if not over new years */
(start_month < $end_m OR start_month = $end_m AND start_day <= $end_d)
AND (end_month > $go_m OR end_month = $go_m AND end_day >= $go_d)
)
GROUP BY id
ORDER BY start_weekday IS NULL DESC,
start_weekday DESC";

$result = mysqli_query($con, $sql) or die(mysqli_error($con));
while ($result && mysqli_num_rows($result) && $row = mysqli_fetch_array($result)) {
if($kalender == 8) { // om den cyclic jewish calendar, one more argument is needed
$out_arr = get_holiday ($ut_arr, $row, $kalender, $go_Y, $go_m, $go_d, $end_Y, $end_m, $end_d, $con, $country, array($kal[4]['go']['Y']));
} else {
$out_arr = get_holiday ($ut_arr, $row, $kalender, $go_Y, $go_m, $go_d, $end_Y, $end_m, $end_d, $con, $country);
}
}

如果'has_php' = 1,get_holday() 函数会执行 PHP 部分,如果假期超过一天,还会在末尾添加罗马数字。但本质上它只是将行放在一个多维数组中:第一部分是它出现时的公历日期(有两个辅助函数来转换日期),第二部分只是对那个公历日期的不相关,第三部分是不同的列来自数据库。

$out_arr['Y-m-d'][$i][$column] = $column_value;

那么现在的问题

如您所见,这非常耗时,目前它仅供个人使用,因此还不是真正的问题。如果你想要一个带有图片图标的考试(瑞典语)on my links page

我想将所有这些输出到另一个数据库表中,该表仅包含 ID 和(公历)日期( future 10 年),并且每年或在添加新假期时更新新表。这是一个好主意,还是它只是在多个地方创建相同的数据,并且存在它们最终不匹配的风险?

最佳答案

使用外键约束确保您的数据库保持一致:

有一张表,里面有所有的日子,

一个用于各种假期,

一个用于各个国家/地区的日历,

还有一个映射表,说明哪几天是哪个区域日历中的哪一天。

然后预先计算一切。这种方法很灵活,允许无限制的日历/国家/节假日,您可以扩展有关每种节假日的更多元数据等,方法是将其添加到单独的表中,或仅调整受影响的表。这样更容易维护。

关于php - 使用中间sql表不好吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47513424/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com