MySQL内联if语句

时间:2012-07-30 17:21:21

标签: php mysql

我有一个查询,从一个表中选择项目的名称,描述,日期等。该表有一个名为“archived”的字段。如果存档字段中的行为1,则表示存档。

我目前在这里使用此代码来显示我的项目列表,无论它是否已存档:

<?php
        // Request the text for zz
        $result = @mysql_query("SELECT oc_sysitem,oc_item,oc_itemdesc,oc_genre,oc_star,oc_alttxt,oc_iearchived,oc_url FROM catalog WHERE oc_sysitem LIKE('zz') ORDER BY oc_sysitem DESC, oc_item, oc_setnum +0 ASC");

        if (!$result) {
            exit('<p>Error performing query: ' . mysql_error() . '</p>');
        }
        //creating the table w/ headers
        echo '
        <table cellpadding="3px">
        <tr>
            <td style="width:360px;font-weight:bold"><p>Title</p></td>
            <td style="width:90px;font-weight:bold"><p>Genre</p></td>
            <td style="width:70px;font-weight:bold"><p>System</p></td>
            <td style="width:51px;font-weight:bold"><p>Rating</p></td>
        </tr>';     
        // Display each zz
        while ($row = mysql_fetch_array($result)) {
        echo '
        <tr title="' . $row['oc_item'] . ' ' . $row['oc_itemdesc'] . ', ' . $row['oc_alttxt'] . '" class="tblhover">
            <td style="width:360px"><a href="' . $row['oc_url'] .'" rel="nofollow">' . $row['oc_item'] . ' ' . $row['oc_itemdesc'] . '</a></td>
            <td style="width:90px">' . $row['oc_genre'] . '</td>
            <td style="width:70px">' . $row['oc_sysitem'] . '</td>
            <td style="width:51px"><img src="../../media/ocdb/' . $row['oc_star'] . '" alt="' . $row['oc_alttxt'] . '" title="' . $row['oc_alttxt'] . '" /></td>
        </tr>
        ';
        }       
        echo '</table>';        
        ?>

如果存档,我希望能够在标题旁边显示一个星号。我无法弄清楚如何添加if语句或者是否正确的路径。欢迎任何建议,谢谢。

4 个答案:

答案 0 :(得分:7)

MySQL有IF函数:

if(expr1, expr2, expr3)

如果expr1TRUE,则返回expr2,否则返回expr3

有关详细信息,请参阅 here

答案 1 :(得分:4)

你可以在sql中做到这一点

示例:

CASE WHEN Archived = 1 THEN Title + '*' ELSE Title END As Title

在你的情况下

CASE WHEN oc_iearchived = 1 THEN oc_item + ' ' + oc_itemdesc + '*' 
ELSE oc_item + ' ' + oc_itemdesc END As [Title]

答案 2 :(得分:1)

使用Ternary if语句可以在PHP中实现这一点。

 $title = $row['oc_item'] . ' ' . $row['oc_itemdesc'] . ', ' . $row['oc_alttxt'] . $row['oc_iearchived'] == 1 ? '*' : '';
 echo '
 <tr title="' . $title . '" class="tblhover">  
 //etc

答案 3 :(得分:0)

我强烈建议您不要在SQL中执行此操作 - 选择archived字段并在视图层(即PHP)中打印星号(如果已设置)同样容易。将此功能推送到数据库并不是很有意义,特别是对于这个微不足道的事情,这样做会使以后添加其他功能(例如,更改星号的样式)变得更加困难。