Comunidad de diseño web y desarrollo en internet online

Alguien puede resolver esta dificil consulta de SQL?

Citar            
MensajeEscrito el 09 Nov 2005 11:01 am
Hola, tengo un problema que me esta dando muchos dolores de cabeza. Aqui estan las tablas que uso para lo que necesito:

Y lo que quiero mostrar es esto:

El problema es basicamente que hice un script con PHP que mostraba esto y "seleccionaba" es decir, ponia en negrita como bien veis el año seleccionado, que es el actual.
El problema viene en que en un mismo html quiero mostrar datos de las tres tablas (excepto mes), es decir, de editorial, noticia y articulo, por lo que tengo que comprobar si hay "algo" en alguna de estas tres tablas en algun mes del año que paso por parámetro ó que recojo como el "actual" y entonces guardar dicho mes(que puede no ser el actual) y seleccionarlo (es decir, ponerlo en negrita).

Ademas de todo queria conseguir que el listado de meses apareciera con los nombres, que estan en el campo "Mes" de la tabla "mes" pero con que salga lo anterior me conformo.

La consulta que uso actualmente es la siguiente (no funciona bien del todo):

Código :

$rec = mysql_fetch_array(mysql_query("SELECT MAX(noticia.id_mes) as var1,MAX(editorial.id_mes) as var2,MAX(articulo.id_mes) as var3 FROM noticia,editorial,articulo WHERE noticia.Anio=$Anio AND editorial.Anio=$Anio AND articulo.Anio=$Anio"));

Entonces hago:

Código :

$ultim = $rec['var1'];   $ultim2 = $rec['var2']; $ultim3 = $rec['var3'];
      $Mes = $array_fecha['mon'];
      $aux = max($ultim,$ultim2,$ultim3);
      if ($aux < $Mes){
         $Mes=$aux;
      }


Alguna sugerencia? :lol: :lol:

PD: espero que alguien tengo esto resulto 1000 veces y lo sepa resolver. Muchismas gracias por adelantado. saludos!

Por frenadoll

922 de clabLevel

6 tutoriales

Genero:Masculino  

Barcelona

firefox
Citar            
MensajeEscrito el 11 Nov 2005 05:40 pm
SELECT id_mes, m.mes from editorial e, mes m where m.Num = e.id_mes and anno=2005
union
select id_mes, m.mes from noticia n, mes m where m.Num = n.id_mes and anno=2005
union
select id_mes, m.mes from articulo a, mes m where m.Num = a.id_mes and anno=2005 order by id_mes desc

te dara los id_mes de las tres tablas ordenadas de forma descendente asi que solo sacas la primera fila lo que te dara es el mayor de id_mes y en el campo mes tendras la descripcion tal como esta en tu tabla mes

Por pinocho

78 de clabLevel



Genero:Masculino  

Luna City

firefox
Citar            
MensajeEscrito el 11 Nov 2005 06:40 pm
Vale, antes de probarlo, me puedes detallar un poco un par de cosas? es que no lo entiendo (hasta donde yo se de sql):

1- "SELECT id_mes, m.mes from editorial e"

que es m.mes? y editorial e?

puedes hacerlo con mi nomenclatura? s que me lio y no se si yo lo entiendo mal o que :S

Antes de nada muchas gracias por contestar ^^

Por frenadoll

922 de clabLevel

6 tutoriales

Genero:Masculino  

Barcelona

firefox
Citar            
MensajeEscrito el 11 Nov 2005 09:42 pm
bueno
veamos

SELECT id_mes, m.mes from editorial e, mes m

[TABLA] [ALIAS]: ejmplo tablarara as tr
se puede obviar el as asi que queda
tablarara tr

entonces cuando quieres invocar un campo de la tabla
tablarara.campo1
pondrias
tr.campo1

en caso de la consulta

pondrias tu
select editorial.id_mes, mes.mes from editorial, mes

optimizando quedaria
SELECT e.id_mes, m.mes from editorial as e, mes as m

optimizando un poquito mas seria

select e.id_mes, m.mes from editorial e, mes m...

supongo que si conoces el UNION
une dos consultas con campos similares en un solo resultado.

Por pinocho

78 de clabLevel



Genero:Masculino  

Luna City

firefox
Citar            
MensajeEscrito el 11 Nov 2005 10:11 pm
Si, el union si, pero no sabia que se podía obviar el as, y que por lo que veo puedes llamar a la tabla por la primera letra (supongo que siempre que no haya dos con la misma letra) no?

Por frenadoll

922 de clabLevel

6 tutoriales

Genero:Masculino  

Barcelona

firefox
Citar            
MensajeEscrito el 12 Nov 2005 01:30 am
No es eso Capt.Mahou, no se trata de que sea la primera letra, es la cadena que quieras, esa cadena es un alias "comodo" de la tabla que referencias inmediatamente a su izquierda.

-- Select alias1.id_mes, alias2.mes from editorial alias1, mes alias2 ---

Aquí como vés, no uso la primera letra, sino otra cadena completamente diferente, y sería igualmente correcta.

Por MorphX

SWAT Team

982 de clabLevel

3 tutoriales

  SWAT

La Telaraña Digital

opera
Citar            
MensajeEscrito el 12 Nov 2005 02:02 am
ya entiendo, gracias MorphX ;)

Por frenadoll

922 de clabLevel

6 tutoriales

Genero:Masculino  

Barcelona

firefox
Citar            
MensajeEscrito el 12 Nov 2005 03:55 am
exacto

Por pinocho

78 de clabLevel



Genero:Masculino  

Luna City

firefox
Citar            
MensajeEscrito el 14 Nov 2005 01:15 pm
Solo queria deciros que he probado la consulta y funciona a la perfección. Muchisimas gracias de nuevo, no sabeis del lio que me habeis sacado porque llevaba algun tiempo con esto parado.
^^ ^^ ^^

Por frenadoll

922 de clabLevel

6 tutoriales

Genero:Masculino  

Barcelona

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.