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

Ordenar tabla 1 dependiendo de datos de la tabla 2

Estas en el tema de Ordenar tabla 1 dependiendo de datos de la tabla 2 en el foro de Mysql en Foros del Web. Tengo las siguientes tablas @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original CREATE TABLE `equipos` (   `idequipo` int ( 10 ) NOT NULL auto_increment ,   ...
  #1 (permalink)  
Antiguo 22/03/2010, 11:23
Avatar de mark_ant0n  
Fecha de Ingreso: enero-2009
Ubicación: Comitan, Chiapas mx
Mensajes: 388
Antigüedad: 15 años, 3 meses
Puntos: 6
Ordenar tabla 1 dependiendo de datos de la tabla 2

Tengo las siguientes tablas
Código MySQL:
Ver original
  1. CREATE TABLE `equipos` (
  2.   `idequipo` int(10) NOT NULL auto_increment,
  3.   `idliga` int(10) default '0',
  4.   `nombrelargo` varchar(255) default '0',
  5.   `nombrecorto` varchar(50) default '0',
  6.   `idcategoria` int(2) default '0',
  7.   `Historia` longtext,
  8.   `logo` varchar(50) default '0',
  9.   `estatus` int(3) default '0',
  10.   `idgrupo` int(3) default '0',
  11.   PRIMARY KEY  (`idequipo`)
  12. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
  13. CREATE TABLE `partidos` (
  14.   `idpartido` int(10) NOT NULL auto_increment,
  15.   `idliga` int(10) default '0',
  16.   `idcategoria` int(10) default '0',
  17.   `fecha` date default NULL,
  18.   `idlocal` int(11) default NULL,
  19.   `idvisita` int(3) default NULL,
  20.   `gollocal` int(2) default NULL,
  21.   `golvisita` int(2) default NULL,
  22.   `jornada` int(2) default '0',
  23.   `estatus` int(2) default '0',
  24.   `idtorneo` int(2) default '0',
  25.   `idcampo` int(2) default '0',
  26.   `hora` time default '00:00:00',
  27.   PRIMARY KEY  (`idpartido`)
  28. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;
Quiero hacer una consulta y que se ordene la tabla equipos dependiendo de los puntos que tenga los equipos en la tabla partido.
Teniendo en cuenta. Que los puntos salen de la siguiente manera
si golvisita>gollocal entonces *3, la suma de puntos es la que deberia ordenar a la consulta por equipos, el equipo que lleve mas puntos en primero y asi sucecivamente,si es el equipo es local si golocal>golvisita entonces *3, pero no tengo ni la menor idea de como hacerle, gracias por su ayuda, hago mencion de que no tengo un campo que diga puntos en ninguna d elas dos tablas
Código MySQL:
Ver original
  1. SELECT * FROM equipos WHERE idliga=1  AND estatus=1 AND idcategoria=1

Gracias por sy u ayuda
__________________
"Diseño de software a la medida"

http://www.sadhoc.com
  #2 (permalink)  
Antiguo 22/03/2010, 12:04
 
Fecha de Ingreso: octubre-2008
Mensajes: 6
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Ordenar tabla 1 dependiendo de datos de la tabla 2

Lo que puedes hacer es una subconsulta o una vista, con algo mas o menos asi:

Select
visita,
local,
(select SUM(IF(visita>local,3,0)) FROM tabla1 where id_equipo = tabla2.id_equipo) AS Puntos
from
equipos
order by Puntos Desc
  #3 (permalink)  
Antiguo 22/03/2010, 12:07
Avatar de mark_ant0n  
Fecha de Ingreso: enero-2009
Ubicación: Comitan, Chiapas mx
Mensajes: 388
Antigüedad: 15 años, 3 meses
Puntos: 6
Respuesta: Ordenar tabla 1 dependiendo de datos de la tabla 2

ok, muchisimas gracias, lo intentare si no despues posteo la consulta, gracias
__________________
"Diseño de software a la medida"

http://www.sadhoc.com
  #4 (permalink)  
Antiguo 22/03/2010, 12:11
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Ordenar tabla 1 dependiendo de datos de la tabla 2

Yo te aconsejaria añadir 2 campos mas a la tabla partidos, puntoslocal y puntosvisitante, y directamente al crear el registro grabar cuantos puntos se lleva cada uno. Se podria pensar que es un valor "innecesario" guardar ya que se puede sacar de los otros campos, pero no va a suponer mucha carga a la base de datos. Por ejemplo los foros (al menos phpbb) tienen campos de este tipo por ejemplo para guardar el numero de posts que lleva.
  #5 (permalink)  
Antiguo 22/03/2010, 12:41
Avatar de mark_ant0n  
Fecha de Ingreso: enero-2009
Ubicación: Comitan, Chiapas mx
Mensajes: 388
Antigüedad: 15 años, 3 meses
Puntos: 6
Respuesta: Ordenar tabla 1 dependiendo de datos de la tabla 2

Gracias vun y jcrg666 por su ayuda, gracias
__________________
"Diseño de software a la medida"

http://www.sadhoc.com
  #6 (permalink)  
Antiguo 23/03/2010, 09:12
Avatar de mark_ant0n  
Fecha de Ingreso: enero-2009
Ubicación: Comitan, Chiapas mx
Mensajes: 388
Antigüedad: 15 años, 3 meses
Puntos: 6
Respuesta: Ordenar tabla 1 dependiendo de datos de la tabla 2

Al final hice la consulta como me lo comento jcrg666, y la sugerencia de un amigo ya que vun tambien tenia una buena sugerencia, gracias por su ayuda, la verdad no tenia en cuenta la existencia del if dentro de mysql, algo complicado gracias, os dejo mi consulta para que algun dia les sirva
Código MySQL:
Ver original
  1. Select * ,(select SUM( ( IF(partidos.idvisita=equipos.idequipo,IF(partidos.golvisita>partidos.gollocal,3,0),0 ) )+ IF(partidos.idlocal=equipos.idequipo,IF(partidos.golvisita<partidos.gollocal,3,0),0 )+IF(partidos.idlocal=equipos.idequipo,IF(partidos.golvisita=partidos.gollocal,1,0),0)+(IF(partidos.idvisita=equipos.idequipo,IF(partidos.golvisita=partidos.gollocal,1,0),0)) ) FROM partidos where partidos.idvisita = equipos.idequipo OR partidos.idlocal=equipos.idequipo) AS Puntos,(SELECT SUM(IF(partidos.idlocal=equipos.idequipo,partidos.gollocal,-partidos.golvisita) + IF(partidos.idvisita=equipos.idequipo,partidos.golvisita,-partidos.gollocal)  ) FROM partidos WHERE partidos.idvisita=equipos.idequipo OR partidos.idlocal=equipos.idequipo ) as diferencia from equipos order by Puntos Desc
__________________
"Diseño de software a la medida"

http://www.sadhoc.com

Última edición por mark_ant0n; 23/03/2010 a las 09:58

Etiquetas: dependiendo, tablas
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:30.