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

Maximo valor de campo en varias tablas

Estas en el tema de Maximo valor de campo en varias tablas en el foro de Mysql en Foros del Web. Hola Compañeros, tengo una duda, pense que podrian ayudarme. Tengo seis tablas, en todas hay un campo llamado num_order, pero ahra quiero hacer un select ...
  #1 (permalink)  
Antiguo 19/05/2008, 08:31
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Pregunta Maximo valor de campo en varias tablas

Hola Compañeros, tengo una duda, pense que podrian ayudarme.

Tengo seis tablas, en todas hay un campo llamado num_order, pero ahra quiero hacer un select que me traiga el maximo valor de este campo cuando el valor de otro campo llamado id_columna sea igual a 3 por ejemplo.

lo hago de la siguiente manera(pense que funcionaria, pero no)

Cita:
select max(num_order) from tbl_text, tbl_textbox, tbl_menu, tbl_checkbox, tbl_radio, tbl_file where id_columna='3';
me manda un error diciendo que el campo num_order es ambiguo. como seria entonces el select?
  #2 (permalink)  
Antiguo 19/05/2008, 09:17
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Tienes que hacer que solamente quede uno de los campos num_order de una de las tablas. La manera más eficiente es haciendo que ese campo actúe de enlace entre todas las tablas, con un INNER JOIN:
Código:
SELECT MAX(num_order) 
FROM tbl_text 
INNER JOIN tbl_textbox USING(num_order) 
INNER JOIN tbl_menu USING (num_order) 
INNER JOIN tbl_checkbox USING (num_order) 
INNER JOIN tbl_radio  USING (num_order) 
INNER JOIN tbl_file  USING (num_order) 
WHERE id_columna='3';
De esa forma, los une a todos a través de la columna en común.
  #3 (permalink)  
Antiguo 19/05/2008, 10:16
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Maximo valor de campo en varias tablas

Hola gnzsoloyo:
Gracia por la pronta respuesta.

Probe la sentencia y ahora me dice que el id_columna es ambigua.
  #4 (permalink)  
Antiguo 19/05/2008, 10:31
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Pregunta Respuesta: Maximo valor de campo en varias tablas

Hola gnzsoloyo, esta sentencia podria servirme?

Cita:
SELECT MAX(num_order) FROM tbl_text INNER JOIN tbl_textbox USING(num_orde
r, id_columna) INNER JOIN tbl_menu USING (num_order, id_columna) INNER JOIN tbl_
checkbox USING (num_order, id_columna) INNER JOIN tbl_radio USING (num_order, i
d_columna) INNER JOIN tbl_file USING (num_order, id_columna) WHERE id_columna=3'
3';
Gracias...
  #5 (permalink)  
Antiguo 19/05/2008, 10:38
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Exclamación Respuesta: Maximo valor de campo en varias tablas

Creo que no funciona.

Última edición por the_web_saint; 19/05/2008 a las 10:45
  #6 (permalink)  
Antiguo 19/05/2008, 10:42
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Maximo valor de campo en varias tablas

Hola

Al parecer no funciona, me devuelve NULL.
Que me aconsejas?

Gracias.
  #7 (permalink)  
Antiguo 19/05/2008, 11:18
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Maximo valor de campo en varias tablas

Prueba así:
(SELECT num_order from tbl_text where id_columna = 3)
union all
(SELECT num_order from tbl_textbox where id_columna = 3)
union all
(SELECT num_order from tbl_file where id_columna = 3)
union all
(SELECT num_order from tbl_menu where id_columna = 3)
union all
(SELECT num_order from tbl_radio where id_columna = 3)
union all
(SELECT num_order from tbl_checkbox where id_columna = 3) ORDER BY num_order desc limit 1
  #8 (permalink)  
Antiguo 19/05/2008, 11:35
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Maximo valor de campo en varias tablas

El MySQL dice que una columna es ambigua cuando el nombre de la misma aparece en dos o más tablas, aunque ni los datos ni el tipo de columnas sean iguales.
Respecto de la consulta en sí, el problema es que no estás definiendo de qué tabla tiene que tomar el dato para id_columna='3'.
Un problema que puede ser, es que hayas usado los mismos nombres para todos los campos de todas las tablas, sin cuidarte de hacer alguna diferenciación que simplifique la escritura de la consulta.
Un ejemplo de eso sería sería ponerle "id_columnaTxBx" a la columna "id_columna" de la tbl_TextBox.
Tales diferencias facilitarían la escritura y la comprensión de qué campo estás pidiendo. Son cuestiones Mnemotécnicas.
El detalle que mencionas, respecto a que si igualando los campos que tienen en común no da como resultado ningún registro, es que no existe ningún conjunto que lo pueda cumplir.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 19/05/2008, 12:37
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Maximo valor de campo en varias tablas

Hola Jurena:

Gracias por tu ayuda, me ha funcionado, pero si deseo tomar solamente el maximo valor de los retornados como seria?, ya que con esta sentencia que me diste me retorna todos los valores que cumplan la condicion.

Hola gnzsoloyo:
Tienes toda la razón, todas la tablas tienen algunos campos con los mismos nombres, pero en esta sentencia deseo que me retorne los valores de todas las tablas que contengan este nombre, no de una especifica.

Muchas Gracias a los dos...
  #10 (permalink)  
Antiguo 19/05/2008, 12:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Maximo valor de campo en varias tablas

¿Has puesto lo que sigue?
ORDER BY num_order desc limit 1
  #11 (permalink)  
Antiguo 19/05/2008, 12:51
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Maximo valor de campo en varias tablas

Si lo he puesto pero en cada select pueden retornarse mas de un registro ya que el campo id_columna no es unico, entonces deberia como buscar el max de cada select para luego que eso se ordene descendientemente y tomar solo el primero como inteligentemente me lo mostraste en la sentencia, podria ser algo como asi:

Cita:
(SELECT max(num_order) from tbl_text where id_columna = 3)
union all
(SELECT max(num_order) from tbl_textbox where id_columna = 3)
union all
(SELECT max(num_order) from tbl_file where id_columna = 3)
union all
(SELECT max(num_order) from tbl_menu where id_columna = 3)
union all
(SELECT max(num_order) from tbl_radio where id_columna = 3)
union all
(SELECT max(num_order) from tbl_checkbox where id_columna = 3) ORDER BY max(num_order) desc limit 1
Pero al probarlo me genera un error, que dice que no se conoce la columna num_order en la clausula order.

Gracias
  #12 (permalink)  
Antiguo 19/05/2008, 12:56
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Maximo valor de campo en varias tablas

Creo que aplicando el mismo order by desc limit 1 en cada unos de los select funcionaria verdad?:

Cita:
(SELECT num_order from tbl_text where id_columna = 6 ORDER BY num_order desc limit 1)
union all
(SELECT num_order from tbl_textbox where id_columna = 6 ORDER BY num_order desc limit 1)
union all
(SELECT num_order from tbl_file where id_columna = 6 ORDER BY num_order desc limit 1)
union all
(SELECT num_order from tbl_menu where id_columna = 6 ORDER BY num_order desc limit 1)
union all
(SELECT num_order from tbl_radio where id_columna = 6 ORDER BY num_order desc limit 1)
union all
(SELECT num_order from tbl_checkbox where id_columna = 6 ORDER BY num_order desc limit 1) ORDER BY num_order desc limit 1
  #13 (permalink)  
Antiguo 19/05/2008, 13:00
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Maximo valor de campo en varias tablas

Si no te funciona eso, prueba esto. No lo he probado.
(SELECT max(num_order) as maximo from tbl_text where id_columna = 3 group by num_order )
union all
(SELECT max(num_order) from tbl_textbox where id_columna = 3 group by num_order )
union all
(SELECT max(num_order) from tbl_file where id_columna = 3 group by num_order )
union all
(SELECT max(num_order) from tbl_menu where id_columna = 3 group by num_order )
union all
(SELECT max(num_order) from tbl_radio where id_columna = 3 group by num_order )
union all
(SELECT max(num_order) from tbl_checkbox where id_columna = 3 group by num_order ) ORDER BY maximo desc limit 1
  #14 (permalink)  
Antiguo 19/05/2008, 13:12
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Maximo valor de campo en varias tablas

Bueno ese ultimo que me diste no me funciono, pero al parecer al aplicarle el order by num_order desc limit 1 en cada select si funciona.

Muchas Gracias Jurena,
  #15 (permalink)  
Antiguo 19/05/2008, 14:43
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Maximo valor de campo en varias tablas

Gracias Compañeros

Ya esta solucionado.

Última edición por the_web_saint; 19/05/2008 a las 15:23
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 17:11.