Как добавить оператор if, чтобы исключить определенные пустые строки

0

У меня есть 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

Теги:
if-statement
foreach

3 ответа

1

Чтобы получить результаты, если какие-либо критерии выполнены, вы можете использовать следующие

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 положения, чтобы применить фильтр пользовательских псевдонимов

  • 0
    позвольте мне попробовать это, я также зайду на сайт sqlfiddle, так как в настоящее время у меня есть только jsfiddle acct, и, похоже, это может помочь.
0

Вероятно, вы могли бы сделать это так: использование псевдонима в условии 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
0

Вы можете добавить инструкцию 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 != ''");
  • 0
    Смогу ли я сделать это для всех 3 условий фильтрации, как для E, S и N в одном запросе?
  • 0
    Да, вы определенно можете. Я обновил свой пост с возможным решением вашего ответа.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню