Php 检索数据库信息并检查特定条件下的结果

Php 检索数据库信息并检查特定条件下的结果,php,mysql,Php,Mysql,我正在寻找最有效的方法来做以下 我有一个包含三个字段的表:id、eventid和movetype,我有以下代码来查询数据库中所有具有匹配eventid的条目: 请注意:movetype只能是三个值:内部、传出、传入 使用一组虚拟数据,var_dump$move_type_数组可以输出: array(1) { [0]=> string(8) "Internal" } array(1) { [0]=> string(8) "Internal" } 输出的另一个示例是: array(1)

我正在寻找最有效的方法来做以下

我有一个包含三个字段的表:id、eventid和movetype,我有以下代码来查询数据库中所有具有匹配eventid的条目:

请注意:movetype只能是三个值:内部、传出、传入

使用一组虚拟数据,var_dump$move_type_数组可以输出:

array(1) { [0]=> string(8) "Internal" } array(1) { [0]=> string(8) "Internal" }
输出的另一个示例是:

array(1) { [0]=> string(8) "Internal" } array(1) { [0]=> string(8) "Incoming" } array(1) { [0]=> string(8) "Outgoing" }
然后,我需要检查输出,看看是否满足以下条件:

数组是否包含内部数组? 如果数组只包含一次内部数据,那么数组是否也包含传入和传出数据? 如果满足任一条件,则应显示一条消息,告诉他们已满足哪个条件,否则应显示一条消息,告诉他们尚未满足条件

我尝试过使用许多PHP函数,如in_array,也尝试过将数据存储在字符串中并使用preg_match,但两种方法都不成功。

尝试以下方法:

// 1. Don't use '*' - fetch only required fields!
// 2. Don't use mysql_* functions - they are obsolete! Use PDO or MySQLi instead.
$get_results = mysql_query("SELECT `movetype` FROM table WHERE eventid='$eventid'");

while($row = mysql_fetch_array($get_results)){

    // Count the values
    $arr = array_count_values(explode(" ", $row['movetype']));

    // Check them here
    if(isset($arr['Internal'])) {

        if($arr['Internal'] === 2)
            echo ' Internal: 2'.PHP_EOL;
        else if($arr['Internal'] === 1
            && isset($arr['Incoming'])
            && isset($arr['Outgoing']))
            echo ' Internal: 1, Incoming and Outgoing'.PHP_EOL;

    }
}
$result = mysql_query("
    SELECT SUM(IF(movetype = 'Internal', 1, 0)) AS internal, 
           SUM(IF(movetype = 'Outgoing', 1, 0)) AS outgoing, 
           SUM(IF(movetype = 'Incoming', 1, 0)) AS incoming
    FROM table
    WHERE eventid = $eventid
    GROUP BY eventid
");
$count = mysql_fetch_array($result);

if ($count['internal'] >= 2 || ($count['internal'] == 1 
        && $count['outgoing'] >= 1 
        && $count['incoming'] >= 1)) {
    echo 'Yes';
} else {
    echo 'No';
}

您需要为所有行或每行检查此项吗?这是否意味着movetype可以是类似于“内部传出传入”的东西?代码将一直执行到第二次检查:if$arr['Internal']==2-并且不会进一步执行。无论如何,感谢您的帮助。您最好检查代码,而不是盲目复制/粘贴。我没有盲目复制和粘贴代码-$arr['Internal']在数组中出现两次Internal时返回值11。我不明白为什么。还有什么原因让你们有双重的isset支票吗?哦,对不起,我已经解决了isset问题。您始终可以在$arr上使用print\u r或var\u dump来查看其中的内容。
$result = mysql_query("
    SELECT SUM(IF(movetype = 'Internal', 1, 0)) AS internal, 
           SUM(IF(movetype = 'Outgoing', 1, 0)) AS outgoing, 
           SUM(IF(movetype = 'Incoming', 1, 0)) AS incoming
    FROM table
    WHERE eventid = $eventid
    GROUP BY eventid
");
$count = mysql_fetch_array($result);

if ($count['internal'] >= 2 || ($count['internal'] == 1 
        && $count['outgoing'] >= 1 
        && $count['incoming'] >= 1)) {
    echo 'Yes';
} else {
    echo 'No';
}