0

次のことを行うための最も効率的な方法を探しています...

ideventidmovetypeの 3 つのフィールドを持つテーブルがあり、一致する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']);
}

注: movetypeは、Internal、Outgoing、Incoming の 3 つの値のみです。

一連のダミー データを使用すると、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" }

次に、出力をチェックして、次の条件が満たされているかどうかを確認する必要があります。

  1. 配列にInternalが 2 回含まれていますか?
  2. 配列にInternal が 1 回しか含まれていない場合、配列にはIncomingOutgoingも含まれていますか?

いずれかの条件が満たされている場合は、どの条件が満たされているかを示すメッセージが表示され、それ以外の場合は、条件が満たされていないことが通知されます。

in_array() などの多くの PHP 関数を使用してみました。また、データを文字列に格納して preg_match() を使用しようとしましたが、両方の方法で失敗しました。

4

2 に答える 2

0

これを試して:

$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';
}
于 2012-07-11T02:05:45.117 に答える
0
// 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;

    }
}
于 2012-07-11T01:59:44.467 に答える