接我前一个帖子的问题
http://topic.csdn.net/u/20120813/15/8aefd4d1-4e63-44d1-8750-bca630e38178.html跟用户谈了下,改了点需求,数组如下 $a = array(
            array('eo_id' => 39,
            'info' => 4,
            'link' => 0,
            'operation_value' => '>',
            'column_name' => 'col1',
            'table_name' => 'tb1'),            array('eo_id' => 40,
                'info' => 4,
                'link' => 0,
                'operation_value' => '>',
                'column_name' => 'col2',
                'table_name' => 'tb1'),            array('eo_id' => 41,
                'info' => 4,
                'link' => 39,
                'operation_value' => '>',
                'column_name' => 'col3',
                'table_name' => 'tb1'),            array('eo_id' => 43,
                'info' => 4,
                'link' => 40,
                'operation_value' => '>',
                'column_name' => 'col5',
                'table_name' => 'tb1'),             array('eo_id' => 44,
                'info' => 4,
                'link' => 0,
                'operation_value' => '>',
                'column_name' => 'col6',
                'table_name' => 'tb1'),
        );
现在link连接的eo_id只是单向连接,比如eo_id为41的它的Link为39,则 (col3 >4 or col1 > 4)  ,也就是说如果link大于0,则这个link去找跟它数值相等的eo_id,然后这2条数据用OR连接,其他的还是用AND连接。
上面数组的连接结果为(col3 >4 or col1 > 4) and (col2 >4 or col5>4) and  col6 >4
现有疑问 :是否先对该数组按link字段排序,先把link对应的eo_id连接。剩下的在连接?

解决方案 »

  1.   

    说实在的,你现在的规则比原来的还要诡异
    $a = array(
                array('eo_id' => 39,
                'info' => 4,
                'link' => 0,
                'operation_value' => '>',
                'column_name' => 'col1',
                'table_name' => 'tb1'),            array('eo_id' => 40,
                    'info' => 4,
                    'link' => 0,
                    'operation_value' => '>',
                    'column_name' => 'col2',
                    'table_name' => 'tb1'),            array('eo_id' => 41,
                    'info' => 4,
                    'link' => 39,
                    'operation_value' => '>',
                    'column_name' => 'col3',
                    'table_name' => 'tb1'),            array('eo_id' => 43,
                    'info' => 4,
                    'link' => 40,
                    'operation_value' => '>',
                    'column_name' => 'col5',
                    'table_name' => 'tb1'),             array('eo_id' => 44,
                    'info' => 4,
                    'link' => 0,
                    'operation_value' => '>',
                    'column_name' => 'col6',
                    'table_name' => 'tb1'),
            );
    $st = array();
    foreach($a as $v) {
      $expr = "$v[table_name].$v[column_name]$v[operation_value]$v[info]";
      if($v['link']) {
        $expr = "($expr or {$st[$v['link']]})";
        unset($st[$v['link']]);
      }
      $st[$v['eo_id']] = $expr;
    }
    echo join(' and ', $st);(tb1.col3>4 or tb1.col1>4) and (tb1.col5>4 or tb1.col2>4) and tb1.col6>4