如何在mysql记录集结果包含数字的地方编写php if语句

如何在mysql记录集结果包含数字的地方编写php if语句,php,string,if-statement,Php,String,If Statement,我有一个叫做菜单的mysql数据库。我能够查询我的数据库以获得相应的记录集。我不想为每个季节写一个查询。我的问题是:如果季节字段包含2,我想在正文中编写一个php if语句来回显消息 表格菜单 id | item (varcar) | season (set) 1 | fresh lemonade | 2,3 2 | smoothie | 2 3 | cafe latte | 4 我的问题很好 mysql\u select\u db($database\u rest

我有一个叫做菜单的mysql数据库。我能够查询我的数据库以获得相应的记录集。我不想为每个季节写一个查询。我的问题是:如果季节字段包含2,我想在正文中编写一个php if语句来回显消息

表格菜单

id | item (varcar)  | season (set)
1  | fresh lemonade | 2,3
2  | smoothie       | 2
3  | cafe latte     | 4
我的问题很好

mysql\u select\u db($database\u rest,$rest)$查询菜单=“从中选择* 菜单”

$menus=mysql\u query($query\u menus,$rest)或die(mysql\u error())

$row\U menus=mysql\U fetch\U assoc($menus)

$totalRows\u menus=mysql\u num\u rows($menus)

如果要在recordset field=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";
        }
      ?> 
我想编写php,以便每个季节包含2个(例如:if(@$row_menus['seasure']包含1个)echo Spring等。因此,结果如下所示:

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

首先,是时候升级那些
mysql\u*
函数了!其次,有更好的方法来建立物品和季节之间的关系。不过,我会让你看看这些东西

$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];
    }
}
我没有测试这个,但它应该对你有用。试一下,让我们知道

编辑:我对其进行了更新,以便您可以在单独的行中列出项目,或在每个季节之后列出项目。

您有两个选择:

  • 使用PHP将字段拆分为一个数组,并完成该操作
  • 使用多行,其中
    季节
    仅保存一个值
  • 使用PHP,您可以使用
    $seasure=explode(',',$row_菜单['seasure']);
    然后使用
    foreach
    语句迭代
    $seasure

    问题是PHP将
    2,3
    解释为字符串。当它转换为数字时,它显示为
    2

    尝试为
    季节
    字段使用多行:

    id | item (varcar)  | season
    1  | fresh lemonade | 3
    2  | smoothie       | 2
    3  | cafe latte     | 4
    4  | fresh lemonade | 2
    
    这也将有助于您选择所有行
    where seasure=2


    最后,正如Tobias所说,不要使用mysql函数。使用受支持的较新函数

    。它们不再被维护。请参阅?了解,然后使用或-将帮助您决定使用哪一个。我不理解您的问题。您是否在寻找“开关”构造?我不想切换任何东西。我想显示冬季,如果季节字段包含1,春季,如果季节字段包含2,夏季,如果季节字段包含3,秋季,如果季节字段包含4。请建议大家转到我在开场白中做的
    mysqli.*
    @iroegbu。我想我可以更规范一些我试过这个。它显示的是一个完整的项目清单,但没有一个赛季。我想知道数据库中的季节性数字(1)是如何在页面上转换为冬季等的,
    $seasons\u数组
    就是在这里发挥作用的。它使用数据库中的数字,并根据数字从数组中提取名称。然而,我仍然只得到一个带有:的物品清单,而没有实际季节的物品清单。如果“所有季节”的季节数等于0,我会在这个选项中使用扳手吗?谢谢DaveyBoy。对我来说,使用多行不是一个选项,因为有数百个菜单项,并且在每个季节多次添加它们不是一个选项。
    id | item (varcar)  | season
    1  | fresh lemonade | 3
    2  | smoothie       | 2
    3  | cafe latte     | 4
    4  | fresh lemonade | 2