Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] No funciona consulta en PHP

Estas en el tema de No funciona consulta en PHP en el foro de PHP en Foros del Web. Buenas noche a todos Tengo un problema con una consulta desde php para sql server 2008, si hago la consulta directa en sql server funciona ...
  #1 (permalink)  
Antiguo 08/01/2017, 00:51
 
Fecha de Ingreso: febrero-2011
Mensajes: 85
Antigüedad: 13 años, 1 mes
Puntos: 3
No funciona consulta en PHP

Buenas noche a todos

Tengo un problema con una consulta desde php para sql server 2008, si hago la consulta directa en sql server funciona bien, pero si la hago desde php no me muestra ningun registros:

$link=mssql_connect('SERVIDOR','sa','pass');
//seleccionamos la base de datos
mssql_select_db("db_datos",$link);

$sql="select * from (select * from db_datos.dbo.Tbldatos union all select * from db_datos.dbo.Tbldatos_h) as h where codigo not in (select codigo from db_datos.dbo.Tblcodigos where id = '1') and id = '1' and tipo='VENTAS' and CAST(substring(fecha,1,4)+''+substring(fecha,6,2)+ ''+substring(fecha,9,2) AS int)=20161108";

El campo fecha lo definieron en la base de datos como Varcahr(10) con el formato aaaa-mm-dd

$resultado=@mssql_query($sql, $link);

//recorremos todos los registros
while($row=@mssql_fetch_assoc($resultado))
{

......muestro los registros.

}

Lo mas curioso es que si la consluta la dejo de la siguiente manera si me muestra informacion:

$sql="select top 1000 * from (select * from db_datos.dbo.Tbldatos union all select * from db_datos.dbo.Tbldatos_h) as h where codigo not in (select codigo from db_datos.dbo.Tblcodigos where id = '1') and id = '1' and tipo='VENTAS' ";

Alguna ayuda
Gracias anticipadas
  #2 (permalink)  
Antiguo 09/01/2017, 08:46
 
Fecha de Ingreso: octubre-2009
Mensajes: 305
Antigüedad: 14 años, 6 meses
Puntos: 29
Respuesta: No funciona consulta en PHP

me parece que el problema es como le llega la consulta al SQL server, trata de procesar las fechas como string, encerrandolas en comillas simples, porque para SQL Server el valor 20161108 es un entero, mientras lo estas comparando con los fragmentos de fecha que al usar el caracter "+" los podría estar sumando, encierra todo en comillas simples para que concatene y no sume.
  #3 (permalink)  
Antiguo 09/01/2017, 11:06
 
Fecha de Ingreso: febrero-2011
Mensajes: 85
Antigüedad: 13 años, 1 mes
Puntos: 3
Respuesta: No funciona consulta en PHP

Gracias por responder sustentio

Pero como comente el campo no es fecha es un varchar(10) por lo que cast funciona concatenando y despues convirtiendo en int

por ejemplo si fecha=2016-11-01

CAST(substring(fecha,1,4)+''+substring(fecha,6,2)+ ''+substring(fecha,9,2) AS int) sera un entero = 20161101

ademas como comente directo en SQL server si funciona la consulta, ya tambien intente:

convert(datetime, fecha, 121) between convert(datetime, '2016-11-01', 121) and convert(datetime, '2016-11-30', 121)

Y de igual manera directo en SQL Server si funciona, pero desde php no.

Alguna idea de lo que pueda ser ??

Última edición por computer_si; 09/01/2017 a las 11:13
  #4 (permalink)  
Antiguo 09/01/2017, 14:02
 
Fecha de Ingreso: octubre-2009
Mensajes: 305
Antigüedad: 14 años, 6 meses
Puntos: 29
Respuesta: No funciona consulta en PHP

pero te sale algún error, o solo no te muestra data?
  #5 (permalink)  
Antiguo 10/01/2017, 11:00
 
Fecha de Ingreso: febrero-2011
Mensajes: 85
Antigüedad: 13 años, 1 mes
Puntos: 3
Respuesta: No funciona consulta en PHP

Solo no me muestra nada de datos

Ayer hice otras pruebas y puse que me mostrara los top 1000 y tome el primer valor que aparece en el campo fecha, después hice la consulta y si muestra registros con ese valor, este es el ejemplo de la consulta:

$sql="select * from (select * from db_datos.dbo.Tbldatos union all select * from db_datos.dbo.Tbldatos_h) as h where codigo not in (select codigo from db_datos.dbo.Tblcodigos where id = '1') and id = '1' and tipo='VENTAS' and fecha='2016-08-01'";

Despues cambio el dato fecha por: '2016-11-01' y ya no vuelve a mostrar nada, no obstante que si existen registros con ese valor.

Ahora si estoy mas confundido sera por el volumen de informacion que tiene la tabla (18 millones de registros).

En el script de php tengo habilitado set_time_limit(0)

Alguna idea ????

Última edición por computer_si; 10/01/2017 a las 11:29
  #6 (permalink)  
Antiguo 10/01/2017, 17:39
 
Fecha de Ingreso: febrero-2011
Mensajes: 85
Antigüedad: 13 años, 1 mes
Puntos: 3
Respuesta: No funciona consulta en PHP

Buenas tardes

Finalmente solucione el problema y creo que se tendría que mover de foro, ya que este radicaba en un error de integridad de la base de datos.

Como di con el problema, resulta que la tabla Tbldatos tiene registros de ventas y de compras, el volumen de registros de compras ascendía a 18 millones, mientras que los de ventas solo a 4 millones, por lo que decidí hacer pruebas moviendo compras a una tabla temporal y dejar solo ventas para hacer pruebas y resulta ser que cuando borre los 18 millones de registros, misteriosamente Tbldatos me marco que solo tenia 2 millones de registros, lo que me preocupo aun mas, pero al hacer revisión de estos por fechas estaban correctos, por lo que el numero real era solo de 20 millones.

Hecho esto hice pruebas y funciono sin problemas, regrese los 18 millones hice pruebas y todo ok.

Agradezco de antemano por su apoyo.

Etiquetas: fecha, registro, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:38.