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

Problemas con sentencia ORDER BY + UNION

Estas en el tema de Problemas con sentencia ORDER BY + UNION en el foro de Mysql en Foros del Web. Hola a todos. Veréis tengo un problema con un script cuando ejecuto la sentencia con UNION este lanza el siguiente error: Unknown column 'subscribers.subscribedate' in ...
  #1 (permalink)  
Antiguo 08/10/2016, 09:42
 
Fecha de Ingreso: diciembre-2014
Mensajes: 20
Antigüedad: 9 años, 4 meses
Puntos: 0
Problemas con sentencia ORDER BY + UNION

Hola a todos.

Veréis tengo un problema con un script cuando ejecuto la sentencia con UNION este lanza el siguiente error:

Unknown column 'subscribers.subscribedate' in 'order clause'

Lo he revisado todo y no encuentro el problema las tablas existen las columnas tambien y cuando genero la sentencia por separado desde PHP sin UNION funciona OK, debe haber algun problema con la sintaxis que se me escapa.

Esta es la definicion de la tabla:

Código:
Columna				Tipo			Nulo	Predeterminado
subscriberid			int(11)			No*		
listid				int(11)			No*	0*	
emailaddress			varchar(200)		Sí*	NULL*	
domainname			varchar(100)		Sí*	NULL*	
format				char(1)			Sí*	NULL*	
confirmed			char(1)			Sí*	0*	
confirmcode			varchar(32)		Sí*	NULL*	
requestdate			int(11)			Sí*	0*	
requestip			varchar(20)		Sí*	NULL*	
confirmdate			int(11)			Sí*	0*	
confirmip			varchar(20)		Sí*	NULL*	
subscribedate			int(11)			Sí*	0*	
bounced				int(11)			Sí*	0*	
unsubscribed			int(11)			Sí*	0*	
unsubscribeconfirmed		char(1)			Sí*	0*	
formid				int(11)			Sí*	0*
Este es la sentencia completa:
Código SQL:
Ver original
  1. INSERT INTO email_queues (queueid, queuetype, ownerid, recipient, processed)
  2.  
  3.     SELECT DISTINCT 13, 'send', 1, subscribers.subscriberid, 0
  4.     FROM email_list_subscribers AS subscribers
  5.     JOIN email_lists AS lists ON lists.listid = subscribers.listid AND lists.listid IN (1)
  6.         WHERE subscribers.listid IN (1)
  7.             AND (    
  8.                     (
  9.                         subscribers.subscriberid IN (
  10.                                                         SELECT d.subscriberid AS subscriberid
  11.                                                         FROM email_subscribers_data d
  12.                                                         WHERE d.fieldid = 15 AND d.DATA < 51
  13.                                                     )
  14.                     )
  15.                 )
  16.             AND (subscribers.unsubscribed=0 AND subscribers.bounced=0)
  17.    
  18.     UNION
  19.  
  20.     SELECT DISTINCT 13, 'send', 1, subscribers.subscriberid, 0
  21.     FROM email_list_subscribers AS subscribers
  22.     JOIN email_lists AS lists ON lists.listid = subscribers.listid AND lists.listid IN (1)
  23.         WHERE subscribers.listid IN (1)
  24.             AND (
  25.                     (
  26.                         subscribers.subscriberid IN (
  27.                                                         SELECT d.subscriberid AS subscriberid
  28.                                                         FROM email_subscribers_data d
  29.                                                         WHERE d.fieldid = 16 AND d.DATA < 4
  30.                                                     )
  31.                     )
  32.                 )
  33.             AND (subscribers.unsubscribed=0 AND subscribers.bounced=0)
  34.    
  35.     ORDER BY subscribers.subscribedate ASC
  36.     LIMIT 1000000000

y este es la funcion php que genera la consulta:

[
Cita:
Editado: Código de programación no permitido en los foros de BBDD

Última edición por gnzsoloyo; 08/10/2016 a las 23:21
  #2 (permalink)  
Antiguo 10/10/2016, 00:18
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Problemas con sentencia ORDER BY + UNION

A voz de pronto, te diría que esta consulta se puede optimizar un poco. De entrada yo no haría el unión, sino que usaría un OR en la subconsulta contra email_subscribers.

En cuanto al error, estas ordenando por una columna que no te aparece en los campos que retornas con el SELECT.
__________________
Aviso: No se resuelven dudas por MP!
  #3 (permalink)  
Antiguo 30/10/2016, 18:21
 
Fecha de Ingreso: diciembre-2014
Mensajes: 20
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Problemas con sentencia ORDER BY + UNION

Gracias por responder,

En la definición de la tabla que puse si te fijas si existe subscribedate que es la columna por la cual se ordena la salida, entonces no es este el problema.

el caso es que Si ejecuto las dos sentencias por separado sin el UNION si lo hace bien, pero cuando uso UNION da ese error, que no se a que puede ser debido. básicamente es la misma sentencia que se repite cambiando algunos datos y se usa UNION para que cuando desde la web se cree un nuevo filtro este los va concatenando con UNION

Última edición por DarKZeroS; 30/10/2016 a las 18:36
  #4 (permalink)  
Antiguo 30/10/2016, 20:55
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Problemas con sentencia ORDER BY + UNION

creo que tu error va de que no se pueden ordernar los datos de los queries que forman parte de una sentencia union, prueba con esto:

Código MySQL:
Ver original
  1. INSERT INTO email_queues (queueid, queuetype, ownerid, recipient, processed)
  2.  
  3.     SELECT DISTINCT 13, 'send', 1, subscribers.subscriberid, 0
  4.     FROM email_list_subscribers AS subscribers
  5.     JOIN email_lists AS lists ON lists.listid = subscribers.listid AND lists.listid IN (1)
  6.         WHERE subscribers.listid IN (1)
  7.             AND (    
  8.                     (
  9.                         subscribers.subscriberid IN (
  10.                                                         SELECT d.subscriberid AS subscriberid
  11.                                                         FROM email_subscribers_data d
  12.                                                         WHERE d.fieldid = 15 AND d.DATA < 51
  13.                                                     )
  14.                     )
  15.                 )
  16.             AND (subscribers.unsubscribed=0 AND subscribers.bounced=0)
  17.    
  18.     UNION
  19.  
  20.     SELECT DISTINCT 13, 'send', 1, subscribers.subscriberid, 0
  21.     FROM email_list_subscribers AS subscribers
  22.     JOIN email_lists AS lists ON lists.listid = subscribers.listid AND lists.listid IN (1)
  23.         WHERE subscribers.listid IN (1)
  24.             AND (
  25.                     (
  26.                         subscribers.subscriberid IN (
  27.                                                         SELECT d.subscriberid AS subscriberid
  28.                                                         FROM email_subscribers_data d
  29.                                                         WHERE d.fieldid = 16 AND d.DATA < 4
  30.                                                     )
  31.                     )
  32.                 )
  33.             AND (subscribers.unsubscribed=0 AND subscribers.bounced=0)
  34.     ) as subconsulta
  35.     ORDER BY subscribedate ASC
  36.     LIMIT 1000000000
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: join, order, php, select, sentencia, tabla, union
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 14:02.