- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 MySQL dB,两个表名为“perm_events”用于重复事件,“reservations”用于存储不重复的单个事件。 “perm_events”表存在的唯一目的是不必重复输入相同的信息。这是关于“perm_events”的问题。
例如:
我正在使用 PHP UI 收集有关事件的信息,我想根据从 UI 收集的信息编写查询。
收集的信息:(这将存储在“perm_events”表中。)
Event name: Event B
Location: Rm. 1
Start time: 9:00AM
End Time: 10:00AM
Weekdays: Tue, Thu
Start Date: 12/1/2019 (If NULL, the event is permanent)
End Date: 12/31/2019
根据上面收集的信息,我想填充一个包含以下内容的表格:
DATE WKDAY EVENT NAME LOCATION STARTING_TIME ENDING_TIME
---------- ----- ---------- -------- ------------- -----------
12/03/2019 TUE EVENT B Rm. 1 9:00AM 10:00AM
12/05/2019 THU EVENT B Rm. 1 9:00AM 10:00AM
12/10/2019 TUE EVENT B Rm. 1 9:00AM 10:00AM
12/12/2019 THU EVENT B Rm. 1 9:00AM 10:00AM
.
.
12/31/2019 TUE EVENT B Rm. 1 9:00AM 10:00AM
目前,我正在将 ABOVE 事件作为一系列事件输入,持续时间从 12/3/2019 到 12/31/2019,如下所示的 UI(以下存储在“预订”表中):
event_name: Event B(1)
location: Rm. 1
start_time: 9:00AM
end_time: 10:00AM
date: 12/3/2019
end_date: 12/31/2019
(Reserve Button)
预订此事件后,我将重复该过程继续下一个过程,直到过程完成 - 如下所示。
event_name: Event B(2)
location: Rm. 1
start_time: 9:00AM
end_time: 10:00AM
date: 12/5/2019
end_date: 12/31/2019
(Reserve Button)
.
.
and so on...
我必须执行这个看似无穷无尽的过程,直到过程完成(我认为上面的示例中有 8 或 9 个)。此外,对于没有结束日期的永久事件,我必须一遍又一遍地不断输入相同的事件信息。
简而言之,我希望通过不为延长的事件或永久事件重复输入事件信息来节省时间 - 一个接一个。这将是一个更有效率的过程。
我该怎么做呢?
提前感谢所有阅读我的问题的专家。
最佳答案
我终于在 Strawberry 的帮助下完成了任务(非常感谢 Strawberry)。
我最终没有使用 MySQL 查询 - 相反,我使用了“按位运算符”来比较单个工作日位与组合的周位,正如 Strawberry 向我介绍的那样。 (请参阅下面的代码和以下注释:
//比较按位运算符 (&) $wkDayBit(1 到 127) 和 $daybit(pow(2,$i++)).)
“按位运算符”技术是解决此任务的关键。
下面的代码是我目前使用的代码的简化版本。
我希望下面的内容能帮助处于类似情况的人。
<?php
// Initialize variables.
$wkDayBit = 0;
$count = 1;
$frmWkday = array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
$wkdays = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
$wkDayBits = array(1, 2, 4, 8, 16, 32, 64);
$permEvtArray = array();
// Credit to HADI for the below function.
function dateRange($first, $last, $step = '+1 day', $format = 'Y-m-d') {
$dates = array();
$current = strtotime($first);
$last = strtotime($last);
while ($current <= $last) {
$dates[] = date($format, $current);
$current = strtotime($step, $current);
}
return $dates;
}
if (isset($_POST['addPermEvent'])) {
if (isset($_POST['wkday'])) {
$ttlRep = 0; // Initialize the variable $ttlRep.
$tmpWkDayBits = $_POST['wkday']; // Assign array 'wkday' to $tmpWkDayBits.
// Loop through the newly assigned $tmpWkDayBits using foreach loop
foreach ($tmpWkDayBits as $row => $tmpWkDayBit) {
$wkDayBit = $wkDayBit + $tmpWkDayBit;
}
}
// Call function dateRange() & get all dates that are between start date and end date.
$dateRange = dateRange($_POST['stDate'], $_POST['endDate']);
// Convert the bitwise integer to an array (Credit to Sammitch for this bit).
for ($i=0; $i<7; $i++) { // $i = loop 0 thru 6
$daybit = pow(2,$i); // 1, 2, 4, 8, 16, 32, 64
// Compare bitwise operator(&) $wkDayBit(1 thru 127) and $daybit(pow(2,$i++)).
if ($wkDayBit & $daybit) {
$newWkdays[]=$frmWkday[$i];
}
}
// Increment $ttlRep with # days of dated perm events one at a time (e.g., #/$ttlRep)
foreach ($dateRange as $rsvDate) {
if (in_array(date('D', strtotime($rsvDate)), $newWkdays)) {
$ttlRep ++;
}
}
/*-----------------------------------------------------
Compare to see if checked weekday(s), that is(are)
in the date-range($dateRange) is in $newWkdays[] array.
+-----------------------------------------------------*/
foreach ($dateRange as $rsvDate) {
if (in_array(date('D', strtotime($rsvDate)), $newWkdays)) {
// Add a counter to the event title.
$eventTitle = $_POST['permEvTtl'] . " [" . $count . "/" . $ttlRep . "]";
$count++;
// Assign each event details to an array.
$permEvt = [
'eventTitle' => $eventTitle, // Text field
"reservDate" => $rsvDate, // 2020-06-01 format
"wkDay" => $wkdays[date('w', strtotime($rsvDate))], // $wkdays['n']
"reservTime" => date('g:i A', strtotime($_POST['stTime'])), // 8:00 PM
"endTime" => date('g:i A', strtotime($_POST['endTime'])), // 8:00 PM format
'userGr' => $_POST['userGr'], // Text field
'rmReserv' => $_POST['rmReserv'], // Text field
'reservCreated' => date('Y-m-d H:i:s') // 2020-06-01 22:32:06 format
];
$permEvtArray[] = $permEvt;
}
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="chrome">
<link rel='stylesheet' type='text/css' href='assets/css/testCodes.css'>
<title>Permanent Events Test Codes</title>
</head>
<body>
<div class="permEvent-form">
<form method="POST">
<h3>BOOK PERM EVENT</h3>
<div>
<label for="permEvTtl">Perm Event Title:</label>
<input type="text" name="permEvTtl" id="permEvTtl" required placeholder="Title"><br>
<label for="rmReserv">Room/Loc:</label>
<input type="text" name="rmReserv" id="rmReserv" required placeholder="Room"><br>
</div>
<div>
<label for="stDate">Start/End Dates:</label>
<input type="date" name="stDate" id="stDate" required>
<input type="date" name="endDate" id="endDate" required>
</div>
<div>
<label for="stTime">Start/End Times:</label>
<input type="time" name="stTime" id="stTime" required>
<input type="time" name="endTime" id="endTime" required>
</div>
<div>
<label for="userGr">User Group:</label>
<input type="text" name="userGr" id="userGr" required placeholder="Group"><br>
</div>
<div class="wkday_chk">
<h3>Weekdays</h3>
<?php for ($i=0; $i<7; $i++): ?>
<input type="checkbox" name="wkday[]" id="<?php echo $frmWkday[$i]?>" value="<?php echo $wkDayBits[$i]?>">
<label for="<?php echo $frmWkday[$i]?>"><?php echo $frmWkday[$i]?></label>
<?php endfor ?>
</div>
<div class="permAdd_btn">
<input type="submit" name="addPermEvent" value="ADD PERM EVENT">
</div>
</form>
</div>
<div class="reserv-table">
<table>
<thead>
<tr>
<th>DATE<br>WKDAY</th>
<th>STA TIME<br>END TIME</th>
<th>EVENT TITLE</th>
<th>LOCATION<br>GROUP</th>
<th>RESERVED ON</th>
</tr>
</thead>
<tbody>
<!-- loop through rm_reserved VIEW to populate Reservation table -->
<?php if ($permEvtArray != NULL):?>
<?php foreach ($permEvtArray as $rsv):?>
<tr>
<td><strong><?php echo $rsv["reservDate"]."<br>".$rsv["wkDay"]?></strong></td>
<td><?php echo $rsv["reservTime"]."<br>".$rsv["endTime"]?></td>
<td><?php echo $rsv["eventTitle"]?></td>
<td><?php echo $rsv["rmReserv"]."<br>".$rsv["userGr"]?></td>
<td><?php echo "<strong>".$rsv["reservCreated"]?></td>
</tr>
<?php endforeach?>
<?php endif ?>
</tbody>
</table>
</div>
</body>
</html>
关于php - MySQL Query自动将永久事件填充到表中,无需重复输入过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58751131/
我想知道如何考虑需要您做出某些选择才能看到最终结果的搜索系统。我说的是 select 表单,您可以在其中根据您的选择继续操作,然后您会看到结果。 下面描述了我正在谈论的一个随机示例。想象一下 Init
您好,我目前正在编写一些软件来管理我们的库存。我搜索了 2 个表 master_stock(保存每一个股票代码和描述)库存(保存库存代码、地点、数量...) 一切都很好,但这是我遇到的问题。 假设我的
我有 2 个表,我想合并其数据。id 是我的关键字段(增量且不同)。表1和表2字段说明例如:id - 名称 - 值 我想将表2的所有数据插入表1,它们有不同的数据,但在某些行中有相同的id。 所以当我
我正在努力解决汇编中的一个问题,我必须获取十六进制代码的第一个字节 (FF) 并将其复制到整个值中: 0x045893FF input 0xFFFFFFFF output 我所做的
我有 Eclipse Indigo 版本,我可以在其中运行 Java 和 C++ 项目。 但我只想使用另一个 Eclipse 来编写 C++ 项目。所以我将 eclipse(不是工作区)的源文件夹复制
This question already has answers here: What is a NullPointerException, and how do I fix it? (12个答案)
This question already has answers here: Numbering rows within groups in a data frame (8个答案) 5个月前关闭。
我知道用q记录到寄存器中,但我想知道是否可以设置一些东西来快速调用最后一个记录,就像一样。 回顾最后一个简短的编辑命令(有关 的讨论请参阅 here。)。 我知道@@,但它似乎只有在执行@z之后才起作
来自 Eclipse 并且一直习惯于复制行,发现 Xcode 没有这样的功能是很奇怪的。或者是吗? 我知道可以更改系统范围的键绑定(bind),但这不是我想要的。 最佳答案 要删除一行:Ctrl-A
假设我有一个包含元素的列表,例如[1,2,3,4,5,6,7,8]。我想创建长度为 N 的该元素的所有排列。 因此,对于N = 4,它将是[[1,1,1,1],[1,1,1,2],[1,1,2,1],
我有一个带有 JMenu 的 JFrame。当我在某些情况下添加包含图像的 JPanel 时,程序首次启动时菜单会重复。调整大小时重复的菜单消失。任何建议都非常感激。谢谢。代码如下: public c
我正在尝试查找目录中文件的重复项。 我对这个 block 有一个问题,它以文件地址作为参数: public void findFiles(ArrayList list){ HashMap hm
我知道这个问题已经发布并且已经给出了答案,但我的情况不同,因为我在单个方法上填充多个下拉列表,所以如果我点击此链接 After every postback dropdownlist items re
我正在尝试为我的日历应用程序实现重复模式。我希望它的工作方式与 Outlook 在您设置重复约会时的工作方式相同。 public async Task> ApplyReccurrencePeriod
我有一个利用 cookie 来支持准向导的应用程序(即,它是一组相互导航的页面,它们必须以特定顺序出现以进行注册)。 加载 Logon.aspx 页面时 - 默认页面 - 浏览器 cookie 看起来
我有 3 个输入,代码检查它们是否为空,如果为空,则将变量值添加到输入中。 所以我有 3 个具有值的变量: var input1text = "something here"; var input2t
根据数组的长度更改数组的每个元素的最佳方法是什么? 例如: User #1 input = "XYZVC" Expected Output = "BLABL" User #2 input = "XYZ
我在让 Algolia 正常工作时遇到了一些麻烦。我正在使用 NodeJS 并尝试在我的数据库和 Algolia 之间进行一些同步,但由于某种原因似乎随机弹出大量重复项。 如您所见,在某些情况下,会弹
遵循以下规则: expr: '(' expr ')' #exprExpr | expr ( AND expr )+ #exprAnd | expr ( OR expr )+ #exprO
我有一个布局,我想从左边进入并停留几秒钟,然后我希望它从右边离开。为此,我编写了以下代码: 这里我在布局中设置数据: private void loadDoctor(int doctorsInTheL
我是一名优秀的程序员,十分优秀!