Я использую PHP для веб-приложений, Oracle для базы данных и тестирую запросы с помощью TOAD.
Когда я выполнил первый запрос, я получил 90 строк результатов в обоих (PHP и toad):
select cliente, nombre, cadena,sum(valor) valor, sum(docs) docs,
ROUND(sum(vprom),2) vprom FROM DBO.LAC_PEDIDO_TIENDA_DIA WHERE
(trunc(fecha)=trunc(TO_DATE('2016-11-14','YYYY-MM-DD')) ) GROUP BY
cliente, nombre, cadena
Когда я запустил второй, я получил 91 от жабы и 146 от PHP:
select cliente, nombre, cadena,sum(valor) valor, sum(docs) docs,
ROUND(sum(vprom),2) vprom FROM DBO.LAC_PEDIDO_TIENDA_DIA WHERE
(trunc(fecha)=trunc(TO_DATE('2016-11-14','YYYY-MM-DD')) OR DLUN>7 )
GROUP BY cliente, nombre, cadena
Отличается «DLUN> 7«
Я создал класс для подключения:
<?php
include 'credenciales.php';
class PHPRequest
{
public $c1;
function __construct($ruta,$usuario,$password)
{
try {
$this->c1 = new PDO($ruta,$usuario,$password);
$this->c1->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch (Exception $e) {
echo json_encode(array('exito'=>'0', 'mensaje'=>'error de conexion'));
}//catch
}
public function cantidadFilas($query)
{
$cantidad = $this->c1->query($query);
return $cantidad->fetchColumn();
}
function query($query)
{
try {
$encode = array();
$cantidad = $this->cantidadFilas($query);
$resultado = $this->c1->query($query,PDO::FETCH_ASSOC);
$contador=0;
if($cantidad!='0' && $cantidad!='-1'){
while($valor=$resultado->fetch()) {
$contador++;
//var_dump($resultado->fetch());
$encode[]=$this->utf8ize($valor);
}//while
echo $contador;
}
if (sizeof($encode)==0) {
$encode = array("exito"=>0,'mensaje'=>'no encontraron registros');
}
$enconde = $this->utf8ize($encode);
return json_encode($encode,JSON_PRETTY_PRINT);
} catch (Exception $e) {
$encode = array("exito"=>0,'mensaje'=>'error:'.$e->getMessage());
return json_encode($encode);
}
}
function utf8ize($d) {
if (is_array($d)) {
foreach ($d as $k => $v) {
$d[$k] = $this->utf8ize($v);
}
} else if (is_string ($d)) {
return utf8_encode($d);
}
return $d;
}
}$proceso = new PHPRequest($ruta,$usuario,$password);
$proceso->query("select cliente, nombre, cadena,sum(valor) valor, sum(docs) docs, ROUND(sum(vprom),2) vprom FROM DBO.LAC_PEDIDO_TIENDA_DIA WHERE (trunc(fecha)=trunc(TO_DATE('2016-11-14','YYYY-MM-DD')) OR DLUN>7 ) GROUP BY cliente, nombre, cadena");
?>
Вот код представления таблицы базы данных:
CREATE OR REPLACE FORCE VIEW DBO.LAC_PEDIDO_TIENDA_DIA
(
CLIENTE, NOMBRE, CADENA, FECHA, VALOR, DOCS, DDOM, DLUN, DMAR, DMIE, DJUE, DVIE, DSAB, VPROM
)
AS
SELECT cliente, nombre, cadena, fecha, valor, docs, 0 dDOM, 0 dLUN, 0 dMAR, 0 dMIE, 0 dJUE, 0 dVIE, 0 dSAB, 0 VPROM
FROM dbo.lac_pedidos_dia
UNION ALL
SELECT cliente, nombre, cadena, TO_DATE ('', 'DD/MM/YYYY') fecha, 0 VALOR, 0 DOCS, dDOM, dLUN, dMAR, dMIE, dJUE, dVIE, dSAB, VPROM FROM dbo.lac_dia_tienda;
Задача ещё не решена.
Других решений пока нет …