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 = "选择 * 从菜单";

$menus = mysql_query($query_menus, $rest) or 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

我想编写 php,以便如果季节 CONTAINS 2(例如:if (@$row_menus['season'] CONTAINS 1) echo Spring 等),结果将如下所示:

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

2 回答 2

1

首先,是时候升级这些mysql_*功能了!其次,有更好的方法来建立项目与其季节之间的关系。不过,我会让你看看那些东西。

$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

你有两个选择:

  1. 使用 PHP 将字段拆分为一个数组并通过该数组进行处理
  2. 使用season仅包含一个值的多行

使用 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 回答