У меня есть SELECT
которая успешно заполняет нужные мне данные в следующей таблице. Однако я хочу отфильтровать результаты с помощью оператора if. В основном я хочу иметь его где:
Если есть значение для Timestamp
и/или msg
получить результаты, остальные оставить пустым.
<?php foreach ( $result as $query ){ ?>
<tr>
<td><?php echo $query->text1; ?></td>
<td><?php echo $query->text2; ?></td>
<td><?php echo $query->text3; ?></td>
<td><?php if($query->Timestamp!=""){echo date('m/d/y', strtotime($query->Timestamp)); }?></td>
<td><?php echo $query->msg; ?></td>
</tr>
<?php }?>
Как бы написать эту инструкцию if в этот код, чтобы отображать только строки, которые создавали либо date
либо msg
либо и то, и другое?
В соответствии с просьбой я добавил исходный запрос, хотя и немного запутанный, поэтому я надеялся избежать его дальнейшего использования.
$result = $wpdb->get_results(
"SELECT DISTINCT text3,
CASE WHEN text3 LIKE '%S' THEN S_Msg
WHEN text3 LIKE '%N' THEN N_Msg
ELSE E_Msg
END AS msg,
CASE WHEN text3 LIKE '%S' THEN S_Time
WHEN text3 LIKE '%N' THEN N_time
WHEN text3 LIKE '%E' THEN E_time
END AS Timestamp,
value1
FROM table_1 AS a
INNER JOIN table_2 AS b
ON a.Value2 = b.Value3
WHERE value1='$value1'");
Я открыт для предложений для любого решения, которое работает :)
Я попытался использовать предложение, сделанное М. Халидом Джунайдом
having (msg is not null and msg <> '')
or (Timestamp is not null and Timestamp <> '')
однако это вызывает проблемы с другими запросами, которые больше не загружаются, поскольку я думаю, из-за того, что я не использовал группы, но несколько разных запросов на странице, и это лишь один из них в рамках большего набора запросов.
Я боюсь, что это над моей головой. чтобы воспроизвести это на sqlfiddle, мне нужно будет настроить 3 таблицы базы данных, поэтому потребуется день, чтобы подготовить это, если у кого-то другое решение. Я все еще открыт для копа из заявления if, а также lol
Чтобы получить результаты, если какие-либо критерии выполнены, вы можете использовать следующие
select distinct text3,
case when text3 like '%S' then S_Msg when text3 like '%N' then N_Msg else E_Msg end as msg,
case when text3 like '%S' then S_Time when text3 like '%N' then N_time when text3 like '%E' then E_time end as Timestamp,
value1
from table_1 as a
inner join table_2 as b on a.Value2 = b.Value3
where value1='$value1'
having (msg is not null and msg <> '')
or (Timestamp is not null and Timestamp <> '')
Не уверен, как ваши данные сохраняются в БД как NULL
или пустым, поэтому я добавил оба фильтра. Цель использования having
положения, чтобы применить фильтр пользовательских псевдонимов
Вероятно, вы могли бы сделать это так: использование псевдонима в условии having
select distinct
text3,
case
when text3 like '%S' then S_Msg
when text3 like '%N' then N_Msg
else E_Msg
end as msg,
case
when text3 like '%S' then S_Time
when text3 like '%N' then N_time
when text3 like '%E' then E_time
end as Timestamp,
value1
from table_1 as a
inner join table_2 as b on a.Value2 = b.Value3
having value1='$value1' and msg is not null and timestamp is not null
Вы можете добавить инструкцию AND в конце, которая проверяет Timestamp или N_msg как непустую
$result = $wpdb->get_results(
"SELECT DISTINCT text3,
CASE WHEN text3 like '%S' THEN S_Msg
WHEN text3 like '%N' THEN N_Msg
ELSE E_Msg
END AS msg,
CASE WHEN text3 LIKE '%S' THEN S_Time
WHEN text3 LIKE '%N' THEN N_time
WHEN text3 LIKE '%E' THEN E_time
END AS Timestamp,
value1
FROM table_1 AS a
INNER JOIN table_2 AS b
ON a.Value2 = b.Value3
WHERE value1='$value1'
AND N_msg != '' OR S_time != '' OR N_time != '' OR E_time != ''");