5

1 つのテーブルからアイテムの名前、説明、日付などを選択するクエリがあります。このテーブルには、「アーカイブ済み」という名前のフィールドがあります。行のアーカイブ済みフィールドに 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

4 に答える 4

11

IFMySQLには次の機能があります。

if(expr1, expr2, expr3)

返される場合expr1TRUE返さexpr2れ、そうでない場合は返されますexpr3

詳細はこちらをご覧ください

于 2012-07-30T17:30:09.957 に答える
5

あなたは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]
于 2012-07-30T17:23:58.807 に答える
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
于 2012-07-30T17:27:59.443 に答える
0

SQLではこれを行わないことを強くお勧めします。archivedフィールドを選択し、設定されている場合はビューレイヤー(つまり、PHP)にアスタリスクを印刷するのも同じくらい簡単です。この機能をデータベースにプッシュすることは、特にこれほど些細なことではあまり意味がありません。そうすると、後で他の機能を追加する(たとえば、アスタリスクのスタイルを変更する)ことが難しくなります。

于 2012-07-30T17:28:02.953 に答える