首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检索数据库信息并检查某些条件下的结果

检索数据库信息并检查某些条件下的结果
EN

Stack Overflow用户
提问于 2012-07-11 01:37:57
回答 2查看 387关注 0票数 0

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

我有一个包含三个字段的表: id、eventid和movetype --我有下面的代码来使用匹配的事件id查询数据库中的所有条目:

代码语言:javascript
复制
$get_results = mysql_query("SELECT * FROM table WHERE eventid='$eventid'");
while($row = mysql_fetch_array($get_results)){
    // store results in array
    $move_type_array = explode(" ", $row['movetype']);
}

请注意:移动类型只能是三个值:内部值、传出值、传入值。

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

代码语言:javascript
复制
array(1) { [0]=> string(8) "Internal" } array(1) { [0]=> string(8) "Internal" }

输出的另一个例子是:

代码语言:javascript
复制
array(1) { [0]=> string(8) "Internal" } array(1) { [0]=> string(8) "Incoming" } array(1) { [0]=> string(8) "Outgoing" }

然后,我需要检查输出,看看是否满足以下条件:

  1. 数组是否两次包含内部
  2. 如果数组只包含一次内部,那么数组是否也包含传入的传出的

如果满足任何一种条件,则应该显示一条消息,告诉他们哪个条件已经满足,否则消息应该告诉他们条件没有满足。

我尝试过使用许多PHP函数,例如in_array(),并且尝试将数据存储在字符串中并使用preg_match(),但是在这两种方法中我都失败了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-11 02:05:45

试试这个:

代码语言:javascript
复制
$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';
}
票数 0
EN

Stack Overflow用户

发布于 2012-07-11 01:59:44

代码语言:javascript
复制
// 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;

    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11424371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档