Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Paginator y MSSQL

Estas en el tema de Paginator y MSSQL en el foro de SQL Server en Foros del Web. Hola, estoy migrando una aplicación PHP de MySQL a Sql Server. En todas las querys que tengo con ORDER BY estoy obteniendo el mismo problema. ...
  #1 (permalink)  
Antiguo 12/11/2006, 10:44
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 19 años, 2 meses
Puntos: 19
Paginator y MSSQL

Hola, estoy migrando una aplicación PHP de MySQL a Sql Server. En todas las querys que tengo con ORDER BY estoy obteniendo el mismo problema.

Ejemplo:
Código:
SELECT * FROM Usuarios as USU, Clientes as CLI 
WHERE USU.Cliente = CLI.Id
ORDER BY CLI.Codigo ASC, USU.Nombre
PHP me dice:
Warning: mssql_query() [function.mssql-query]: message: Column "Clientes.Codigo" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause. (severity 16)

Lo curioso es que pruebo esa misma query en el Microsoft SQL Server Management Studio Express y no me da error ninguno y me da los resultados bien.

¿Alguna ayuda? Gracias

Última edición por jerkan; 13/11/2006 a las 06:26
  #2 (permalink)  
Antiguo 12/11/2006, 18:50
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años, 6 meses
Puntos: 25
Parece un error de las librerías de PHP.

Haz la prueba sacando esa vetusta sintaxis de cross join y reemplazala por INNER JOINs y quizá eso mejore el asunto. Si no, tendrás que ver que es lo que pasa con tus librerías.

SELECT *
FROM Usuarios as USU
INNER JOIN Clientes as CLI
ON USU.Cliente = CLI.Id
ORDER BY CLI.Codigo ASC, USU.Nombre
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #3 (permalink)  
Antiguo 13/11/2006, 05:56
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 19 años, 2 meses
Puntos: 19
El caso es que me pasa con consultas más sencillas. (Quizás el ejemplo no fue el mejor. Mea culpa) Con la query siguiente también me pasa:
Código:
SELECT * FROM Usuarios ORDER BY Nombre ASC
Cita:
Iniciado por Mithrandir Ver Mensaje
Parece un error de las librerías de PHP.
Buah, y cómo se mira eso? Yo tengo instalado el php 4.4.4 y el SQL Server 2005.
El phpinfo me dice que la libreria mssql es la 7.0. Lo que si cambié fue la famosita librería ntwdblid.dll necesaria para conectarse al sql server (más información aquí).
  #4 (permalink)  
Antiguo 13/11/2006, 06:25
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 19 años, 2 meses
Puntos: 19
Otra vez tengo que entonar el mea culpa. Me explicaré mejor.
Estoy utilizando el paginador de jpinedo y he tenido que modificarlo para que funcione con SQL Server. El mayor problema es que en el SQL Server no funciona el LIMIT del MySQL.
Bueno, pues activando el conteo alternativo he conseguido que no me salga ese error.
Ahora me sale otro. La consulta es la siguiente:
Código:
SELECT TOP 10 * 
FROM (SELECT TOP 10 * 
FROM Usuarios as USU INNER JOIN Clientes as CLI ON USU.Cliente = CLI.Id 
WHERE (USU.Grupo = 1) 
ORDER BY CLI.Codigo ASC, USU.Nombre) as subquery
y el SQL Server (también en el Studio Express) me dice:
Código:
The column 'Id' was specified multiple times for 'subquery'
Yo sólo veo un 'Id' en toda la consulta. ¿Alguien me puede ayudar?
  #5 (permalink)  
Antiguo 13/11/2006, 08:04
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 19 años, 2 meses
Puntos: 19
He realizado una pequeña solución para utilizar el paginador de jpinedo con mssql. Como es más bien un tema de php, aquí os dejo un enlace al foro de PHP.

Un saludo.

Última edición por jerkan; 13/11/2006 a las 11:37
  #6 (permalink)  
Antiguo 14/11/2006, 16:49
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años, 6 meses
Puntos: 25
ID parece ser una palabra reservada, mejor cambiarla o por lo menos mencionarla así:

CLI.[Id]

El error parece indicar que tienes la columna ID en ambas tablas, entonces el SELECT interno responde con 2 columnas ID, que el SELECT externo no sabe como manejar, pues ambas se llaman igual.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
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 13:48.