如何添加 case 语句以在每条记录后添加 break?
How to add case statement to add break after every record?
当查找 LIKE 'B%'
的下一条记录时,每行 LIKE 'A%'
之后应该有一个中断。
$stmt = $con->prepare("SELECT * FROM fistevent WHERE Event_Id=? AND TicketType=? AND row_name REGEXP '^[A-Z]' ORDER BY row_name ASC");
$stmt->bind_param("ss", $_POST['EventId'],$_POST['TicketType']);
$stmt->execute();
$result = $stmt->get_result();
$numRows = $result->num_rows;
if($numRows > 0) {
echo ' <div class="register">';
while($r = $result->fetch_assoc()) {
$EvntId = $r['Event_Id'];
$RowName = $r['row_name'];
echo '<ul id="sub" class="sub">';
if($r['seats'] == null){
echo '<li class="BlankSeat" ></li>';
}elseif($r['Status'] == 'Y' || $r['Status'] == 'Hold'){
echo '<li class="occupied" title="Row'.$r["seats"].'" name="'.$RowName.'" value="'.$r["seats"].'"></li>';
}else{
echo '<li class="Available" title="Row'.$r["seats"].'" name="'.$RowName.'" value="'.$r["seats"].'"></li>';
}
echo "</ul>";
}
echo '</div>';
I am getting the following output, but I want after `LIKE 'A%'` the next `LIKE 'B%'` should be in the next row.
更新代码在这里
$stmt = $con->prepare("SELECT * FROM fistevent WHERE Event_Id=? AND TicketType=? AND row_name REGEXP '^[A-Z]' ORDER BY row_name ASC");
$stmt->bind_param("ss", $_POST['EventId'],$_POST['TicketType']);
$stmt->execute();
$result = $stmt->get_result();
$numRows = $result->num_rows;
if($numRows > 0) {
echo ' <div class="register">';
$prev='A';
while($r = $result->fetch_assoc()) {
$EvntId = $r['Event_Id'];
$RowName = $r['row_name'];
if($prev!=$RowName){
echo "<br>";
$prev=$RowName;
}
echo '<ul id="sub" >';
if($r['seats'] == null){
echo '<li class="BlankSeat" ></li>';
}elseif($r['Status'] == 'Y' || $r['Status'] == 'Hold'){
echo '<li class="occupied" title="Row'.$r["seats"].'" name="'.$RowName.'" value="'.$r["seats"].'"></li>';
}else{
echo '<li class="Available" title="Row'.$r["seats"].'" name="'.$RowName.'" value="'.$r["seats"].'"></li>';
}
echo "</ul>";
}
echo '</div>';
}else{
echo "No seats Available";
}
**in responsive**
您可以在 php
中将此函数用于 like
function like_match($pattern, $subject)
{
$pattern = str_replace('%', '.*', preg_quote($pattern, '/'));
return (bool) preg_match("/^{$pattern}$/i", $subject);
}
示例
like_match('%A','Apple'); //TRUE
like_match('%c', 'coop'); //TRUE
like_match('%l', 'deke'); //FALSE
like_match('%m', 'flip-flop'); //FALSE
这应该在每个唯一行之间(而不是在第一行之前)添加换行符,并将 row_name
字母添加到每个唯一行的开头。
$prev='';
while($r=$result->fetch_assoc()) {
if($prev!=$r['row_name']){
if($prev!=''){echo "<br>";} // add breaks between rows
echo "<ul id=\"sub\" class=\"sub\">{$r['row_name']} "; // label the row
$prev=$r['row_name']; // store new row_name letter
}else{
echo "<ul id=\"sub\" class=\"sub\">"; // not a new row_name, extend existing row
}
if($r['seats']==null){
echo "<li class=\"BlankSeat\"></li>";
}elseif($r['Status']=='Y' || $r['Status']=='Hold'){
echo "<li class=\"occupied\" title=\"Row{$r['seats']}\" name=\"{$r['row_name']}\" value=\"{$r["seats"]}\"></li>";
}else{
echo "<li class=\"Available\" title=\"Row{$r['seats']}\" name=\"{$r['row_name']}\" value=\"{$r['seats']}\"></li>";
}
echo "</ul>";
}
为了克服 OP 的 li {float:left}
样式,他在 css 中进行了此调整:
ul{display: table-cell; }
旧答案从这里开始:
我不知道 Bijender 的回答对你有什么帮助,我也不知道你为什么需要函数调用。我也不知道你说的 "add break after LIKE 'A%".
是什么意思
因为 row_name
是单个字母值,而您只想 return 具有值 A、B、C、D、E、F、G、H、I 或J,那么你会想要这个更简单/更精致的查询:
SELECT *
FROM fistevent
WHERE Event_Id=? AND TicketType=? AND row_name IN ('A','B','C','D','E','F','G','H','I','J')
ORDER BY row_name ASC
我在您的 post 中发现的错误是您的 table 列是 EventId
或 Event_Id
。为了清楚起见,您应该更正此错字。
由于您通过row_name订购,您只需要检查新值是否与之前的值不同。
//setting firstLetter
$firstLetter = '1';
while($r = $result->fetch_assoc()) {
$EvntId = $r['Event_Id'];
$RowName = $r['row_name'];
echo '<ul id="sub" class="sub">';
if($r['seats'] == null)
{
echo '<li class="BlankSeat" ></li>';
}
else if($r['Status'] == 'Y' || $r['Status'] == 'Hold')
{
echo '<li class="occupied" title="Row'.$r["seats"].'" name="'.$RowName.'" value="'.$r["seats"].'"></li>';
}
else
{
echo '<li class="Available" title="Row'.$r["seats"].'" name="'.$RowName.'" value="'.$r["seats"].'"></li>';
}
//comparing current first letter with previous first letter,also skipping the break if it is the first row
if($RowName[0] != $firstLetter && $firstLetter !='1' ){
echo "<br />";
}
$firstLetter = $RowName[0];
echo "</ul>";
}
当查找 LIKE 'B%'
的下一条记录时,每行 LIKE 'A%'
之后应该有一个中断。
$stmt = $con->prepare("SELECT * FROM fistevent WHERE Event_Id=? AND TicketType=? AND row_name REGEXP '^[A-Z]' ORDER BY row_name ASC");
$stmt->bind_param("ss", $_POST['EventId'],$_POST['TicketType']);
$stmt->execute();
$result = $stmt->get_result();
$numRows = $result->num_rows;
if($numRows > 0) {
echo ' <div class="register">';
while($r = $result->fetch_assoc()) {
$EvntId = $r['Event_Id'];
$RowName = $r['row_name'];
echo '<ul id="sub" class="sub">';
if($r['seats'] == null){
echo '<li class="BlankSeat" ></li>';
}elseif($r['Status'] == 'Y' || $r['Status'] == 'Hold'){
echo '<li class="occupied" title="Row'.$r["seats"].'" name="'.$RowName.'" value="'.$r["seats"].'"></li>';
}else{
echo '<li class="Available" title="Row'.$r["seats"].'" name="'.$RowName.'" value="'.$r["seats"].'"></li>';
}
echo "</ul>";
}
echo '</div>';
I am getting the following output, but I want after `LIKE 'A%'` the next `LIKE 'B%'` should be in the next row.
更新代码在这里
$stmt = $con->prepare("SELECT * FROM fistevent WHERE Event_Id=? AND TicketType=? AND row_name REGEXP '^[A-Z]' ORDER BY row_name ASC");
$stmt->bind_param("ss", $_POST['EventId'],$_POST['TicketType']);
$stmt->execute();
$result = $stmt->get_result();
$numRows = $result->num_rows;
if($numRows > 0) {
echo ' <div class="register">';
$prev='A';
while($r = $result->fetch_assoc()) {
$EvntId = $r['Event_Id'];
$RowName = $r['row_name'];
if($prev!=$RowName){
echo "<br>";
$prev=$RowName;
}
echo '<ul id="sub" >';
if($r['seats'] == null){
echo '<li class="BlankSeat" ></li>';
}elseif($r['Status'] == 'Y' || $r['Status'] == 'Hold'){
echo '<li class="occupied" title="Row'.$r["seats"].'" name="'.$RowName.'" value="'.$r["seats"].'"></li>';
}else{
echo '<li class="Available" title="Row'.$r["seats"].'" name="'.$RowName.'" value="'.$r["seats"].'"></li>';
}
echo "</ul>";
}
echo '</div>';
}else{
echo "No seats Available";
}
**in responsive**
您可以在 php
中将此函数用于like
function like_match($pattern, $subject)
{
$pattern = str_replace('%', '.*', preg_quote($pattern, '/'));
return (bool) preg_match("/^{$pattern}$/i", $subject);
}
示例
like_match('%A','Apple'); //TRUE
like_match('%c', 'coop'); //TRUE
like_match('%l', 'deke'); //FALSE
like_match('%m', 'flip-flop'); //FALSE
这应该在每个唯一行之间(而不是在第一行之前)添加换行符,并将 row_name
字母添加到每个唯一行的开头。
$prev='';
while($r=$result->fetch_assoc()) {
if($prev!=$r['row_name']){
if($prev!=''){echo "<br>";} // add breaks between rows
echo "<ul id=\"sub\" class=\"sub\">{$r['row_name']} "; // label the row
$prev=$r['row_name']; // store new row_name letter
}else{
echo "<ul id=\"sub\" class=\"sub\">"; // not a new row_name, extend existing row
}
if($r['seats']==null){
echo "<li class=\"BlankSeat\"></li>";
}elseif($r['Status']=='Y' || $r['Status']=='Hold'){
echo "<li class=\"occupied\" title=\"Row{$r['seats']}\" name=\"{$r['row_name']}\" value=\"{$r["seats"]}\"></li>";
}else{
echo "<li class=\"Available\" title=\"Row{$r['seats']}\" name=\"{$r['row_name']}\" value=\"{$r['seats']}\"></li>";
}
echo "</ul>";
}
为了克服 OP 的 li {float:left}
样式,他在 css 中进行了此调整:
ul{display: table-cell; }
旧答案从这里开始:
我不知道 Bijender 的回答对你有什么帮助,我也不知道你为什么需要函数调用。我也不知道你说的 "add break after LIKE 'A%".
是什么意思因为 row_name
是单个字母值,而您只想 return 具有值 A、B、C、D、E、F、G、H、I 或J,那么你会想要这个更简单/更精致的查询:
SELECT *
FROM fistevent
WHERE Event_Id=? AND TicketType=? AND row_name IN ('A','B','C','D','E','F','G','H','I','J')
ORDER BY row_name ASC
我在您的 post 中发现的错误是您的 table 列是 EventId
或 Event_Id
。为了清楚起见,您应该更正此错字。
由于您通过row_name订购,您只需要检查新值是否与之前的值不同。
//setting firstLetter
$firstLetter = '1';
while($r = $result->fetch_assoc()) {
$EvntId = $r['Event_Id'];
$RowName = $r['row_name'];
echo '<ul id="sub" class="sub">';
if($r['seats'] == null)
{
echo '<li class="BlankSeat" ></li>';
}
else if($r['Status'] == 'Y' || $r['Status'] == 'Hold')
{
echo '<li class="occupied" title="Row'.$r["seats"].'" name="'.$RowName.'" value="'.$r["seats"].'"></li>';
}
else
{
echo '<li class="Available" title="Row'.$r["seats"].'" name="'.$RowName.'" value="'.$r["seats"].'"></li>';
}
//comparing current first letter with previous first letter,also skipping the break if it is the first row
if($RowName[0] != $firstLetter && $firstLetter !='1' ){
echo "<br />";
}
$firstLetter = $RowName[0];
echo "</ul>";
}