我正在寻找最有效的方法来完成以下操作。。。
我有一个包含三个字段的表:id、eventid和movetype-我有以下代码来查询数据库中所有具有匹配eventid的条目:
$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)可以输出:
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" }
然后我需要检查输出,看看是否满足以下条件:
- 数组是否包含内部两次
- 如果数组只包含Internal一次,那么数组是否也包含Incoming和Outgoing
如果满足了其中一个条件,则应显示一条消息,告诉他们满足了哪个条件,否则应显示一则消息,告知他们尚未满足这些条件。
我尝试过使用许多PHP函数,如in_array(),也尝试过将数据存储在字符串中和使用preg_match(),但这两种方法都不成功。
试试这个:
$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';
}
// 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;
}
}