multiquery on reports

skala
arnaud 14 years ago
parent 6757dd98d7
commit 0c63875a0d
  1. 61
      main/reports/multiquery.lib.php
  2. 26
      main/reports/reports.php

@ -0,0 +1,61 @@
<?php
// get fields informations
function multiquery_query($array) {
$result = array();
$field = 0;
for ($i = 0; $i <sizeof($array); $i++) {
// mysql handler
$result[$i]['mysql'] = mysql_query($array[$i]);
if (! $result[$i]['mysql'])
die("error in query $i : ".$array[$i]);
// fields
$result[$i]['num_fields'] = mysql_num_fields($result[$i]['mysql']);
for ($j = 0; $j < $result[$i]['num_fields']; $i++) {
$name = mysql_field_name($result[$i]['mysql'], $j);
$result['field'][$field]['query']=$i;
$result['field'][$field]['name']=$name;
$result['field'][$field]['id']=$j;
$result['field_assoc'][$name][$field];
$field++;
}
}
$result['num_queries'] = sizeof($array);
// rows
$numberOfResult = mysql_num_rows($result[0]['mysql']);
for ($i = 1; $i <$result['num_queries']; $i++)
if ($numberOfResult != mysql_num_rows($result[$i]['mysql']))
die("wrong number of row: $numberOfResult vs ".
mysql_num_rows($result[$i]['mysql'])." on query $i");
$result['num_rows'] = $numberOfResult;
$result['num_fields'] = $field;
return $result;
}
function multiquery_num_rows(&$mq_h) {
return $mq_h['num_rows'];
}
function multiquery_num_fields(&$mq_h) {
return $mq_h['num_fields'];
}
function multiquery_field_name(&$mq_h, $id) {
return $mq_h['field'][$id]['name'];
}
function multiquery_fetch_row(&$mq_h) {
$result = array();
$pos = 0;
for ($i = 0; $i < $mq_h['num_queries']; $i++) {
$row = mysql_fetch_row($mq_hi[$i]['mysql']);
for ($j = 0; $j < $row; $j++) {
$result[$pos] = $row[$j];
$pos++;
}
}
return $result;
}

@ -15,6 +15,7 @@ $cidReset = true;
// including files
require_once '../inc/global.inc.php';
require_once 'reports.lib.php';
require_once 'multiquery.lib.php';
// protect script
api_block_anonymous_users();
@ -79,9 +80,19 @@ if ($_REQUEST['format'] == 'csv') {
if (is_array($reports_template[$_REQUEST['type']])) {
$query = $reports_template[$_REQUEST['type']]['getSQL']();
if (! is_array($query))
$query = array($query);
if ($_REQUEST['format'] == 'sql')
die($query);
$result = Database::query($query);
die(var_export($query, true));
$result = &multiquery_query($query);
// check number of result
$numberOfResult = multiquery_num_rows($result);
if ($numberOfResult == 0)
die(get_lang('NoDataAvailable'));
} else {
die('<b>'.get_lang('ErrorWhileBuildingReport').'</b>');
}
@ -93,15 +104,14 @@ if ($_REQUEST['format'] == 'html' || $_REQUEST['format'] == 'directlink') {
} );
</script>';
echo '<table id="reportsData" class="display">'; // FIXME style
$nfields = mysql_num_fields($result);
if (mysql_num_rows($result) == 0) {
die(get_lang('NoDataAvailable'));
}
// counting fields
$nfields = multiquery_num_fields($result);
$columns = array();
$columns_islink = array();
echo '<thead><tr>';
for ($i=0; $i < $nfields; $i++) {
$columns[$i] = mysql_field_name($result, $i);
$columns[$i] = multiquery_field_name($result, $i);
if (substr($columns[$i], -5, 5) != '_link') {
$column_islink[$i] = false;
echo '<th>'.$columns[$i].'</th>';
@ -119,7 +129,7 @@ if ($_REQUEST['format'] == 'html' || $_REQUEST['format'] == 'directlink') {
$columns_link[$i] = '';
error_log("result1: ".$nfields);
echo '</tr></thead><tbody>';
while ($row = Database::fetch_row($result)) {
while ($row = multiquery_fetch_row($result)) {
echo '<tr>';
for ($i = 0; $i<$nfields; $i++)
if (!$columns_islink[$i]){ // ignore links

Loading…
Cancel
Save