0

menus という名前の mysql データベースがあります。データベースにクエリを実行して、それに応じてレコードセットを取得できます。季節ごとにクエリを書きたくありません。私の問題: シーズン フィールドに 2 が含まれている場合にメッセージをエコーするために、本文内に php if ステートメントを記述したいと考えています。

テーブルメニュー

id | item (varcar)  | season (set)
1  | fresh lemonade | 2,3
2  | smoothie       | 2
3  | cafe latte     | 4

私のクエリは正常に動作します

mysql_select_db($database_rest, $rest); $query_menus = "SELECT * FROM メニュー";

$menus = mysql_query($query_menus, $rest) または die(mysql_error());

$row_menus = mysql_fetch_assoc($menus);

$totalRows_menus = mysql_num_rows($menus);

動作するレコードセット フィールド = 2 で動作する場合は、php を記述できます。

<?php echo $row_menus['item']; ?>: <?php
      if (@$row_menus['season'] == 1)
        {
        echo "Winter";
        }
      else if (@$row_menus['season'] == 2)
        {
        echo "Spring";
        }
      else if (@$row_menus['season'] == 3)
        {
        echo "Summer";
        }
      else if (@$row_menus['season'] == 4)
        {
        echo "Fall";
        }
      ?> 

結果ショー:

fresh lemonade: Spring
smoothie: Spring
cafe latte: Fall

if season CONTAINS 2 (例: if (@$row_menus['season'] CONTAINS 1) echo Spring など) のように php を書きたいので、結果は次のようになります。

fresh lemonade: Spring
fresh lemonade: Summer
smoothie: Spring
cafe latte: Fall
4

2 に答える 2

1

まずはこれらのmysql_*機能をアップグレードしましょう!第 2 に、アイテムとその季節との関係を設定するためのより良い方法があります。しかし、私はあなたにそのことを調べさせます。

$query_menus = "SELECT * FROM menus";
$menus = mysql_query($query_menus, $rest) or die(mysql_error());

$seasons_array = array('All Seasons', 'Winter', 'Spring', 'Summer', 'Fall');

while($row_menus = mysql_fetch_array($menus))
{
    $item = $row_menus['item'];
    $season = $row_menus['season'];

    if(strpos($season, ',') !== false)
    {
        $seasons = explode(',', $season);

        // To show the item and season on separate rows
        foreach($seasons as $s)
            echo $item . ': ' . trim($seasons_array[(int)$s]);

        // To show the item, and then a list of seasons
        echo $item . ': ';
        foreach($season as $k => $s)
            echo trim($seasons_array[(int)$s]) . (($k + 1) == count($season) ? '' : ', ');
    }
    else
    {
        echo $item . ': ' . $seasons_array[(int)$season];
    }
}

私はこれをテストしませんでしたが、うまくいくはずです。試してみて、お知らせください。

編集: アイテムを別の行にリストするか、シーズンごとにアイテムをリストできるように更新しました.

于 2013-04-26T15:05:23.060 に答える
0

次の 2 つの選択肢があります。

  1. PHPを使用してフィールドを配列に分割し、それを処理します
  2. season1 つの値のみを保持する複数の行を使用する

PHP を使用する$season=explode(',',$row_menus['season']);と、foreachステートメントを使用してから反復処理を行うことができます。$season

問題は、PHP が2,3文字列として解釈することです。数値に変換すると、次のようになります。2

seasonフィールドに複数の行を使用してみてください。

id | item (varcar)  | season
1  | fresh lemonade | 3
2  | smoothie       | 2
3  | cafe latte     | 4
4  | fresh lemonade | 2

これは、すべての行を選択する場合にも役立ちますwhere season=2

最後に、Tobias が言ったように、mysql_ 関数を使用しないでください。サポートされている新しい機能を使用する

于 2013-04-26T15:20:51.563 に答える