接我前一个帖子的问题
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连接。剩下的在连接?
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连接。剩下的在连接?
$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