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

Limit en un left join

Estas en el tema de Limit en un left join en el foro de Mysql en Foros del Web. hola gente como va? espero puedan iluminarme.. la idea es esta tengo una consulta que dice mas o menos asi.. Código PHP: SELECT  *, IF( datos ...
  #1 (permalink)  
Antiguo 27/02/2012, 20:48
 
Fecha de Ingreso: enero-2007
Mensajes: 285
Antigüedad: 17 años, 3 meses
Puntos: 21
Exclamación Limit en un left join

hola gente como va? espero puedan iluminarme..

la idea es esta tengo una consulta que dice mas o menos asi..



Código PHP:

SELECT 
*, IF(datos.d_semana=$s,'SI','NO') as hay FROM (clientes 
left join categorias on clientes
.cl_categoria_id=categorias.c_id
left join canales on clientes.cl_canal_id=canales.ca_id 
left join zonas on clientes
.cl_prov_id=zonas.z_id 
left join operadores on clientes
.cl_operador_id LIKE operadores.o_id 
left join usuarios on clientes
.cl_merchandiser=usuarios.u_id 
left join datos on clientes
.cl_id=datos.d_cliente and datos.d_semana='$s' 
where clientes.cl_merchandiser='$elmercha'  $sql group by clientes.cl_id ORDER BY $orden 
el problema es en el join de la tabla datos.. por que esta tabla tiene muchiiiiisimos registros entonces al querer cargar la pagina se produce un time out...

la idea seria limitar el if.. para lo cual llegue a esta cosulta...

Código PHP:

SELECT 
FROM 
(clientes left join categorias on clientes.cl_categoria_id=categorias.c_id
left join canales on clientes.cl_canal_id=canales.ca_id 
left join zonas on clientes
.cl_prov_id=zonas.z_id 
left join operadores on clientes
.cl_operador_id LIKE operadores.o_id 
left join usuarios on clientes
.cl_merchandiser=usuarios.u_id 
left join 
(SELECT *, IF(datos.d_semana=$s,'SI','NO') as hay from datos limit 1) AS datos  on clientes.cl_id=datos.d_cliente and datos.d_semana='$s' 
where clientes.cl_merchandiser='$elmercha'  $sql group by clientes.cl_id ORDER BY $orden 
pero la misma no hace lo que quiero ya que.. si por ejemplo.. tendria que arrojarme 3 resultados solo me tira 1 por el limit..

alguien podria darme una mano con esto?

Última edición por marcusaurelio; 27/02/2012 a las 20:56 Razón: error de ortografia
  #2 (permalink)  
Antiguo 28/02/2012, 00:38
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Limit en un left join

esta tabla tiene muchiiiiisimos registros entonces al querer cargar la pagina se produce un time out si estás haciendo un LEFT JOIN se entiende que no puedes prescindir de esa tabla por muchos registros que tengas. Evidentemente un LIMIT no soluciona nada porque entonces los datos no son consistentes. Asegúrate que la tabla tiene los índices necesarios, no sé cuantos registros son "muchiiiiisimos" pero prueba la select en un cliente mysql con EXPLAIN para asegurarte que es un problema de DB y no de PHP.
Saludos
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 28/02/2012, 21:39
 
Fecha de Ingreso: enero-2007
Mensajes: 285
Antigüedad: 17 años, 3 meses
Puntos: 21
Respuesta: Limit en un left join

repara2 gracias por tu respuesta..

mira.. son casi 150000 registros.. ahi trate usando el heidisql y se cuelga... despues de un rato me tira error el programa mismo. obviamente de que explain nada por que no finaliza la consulta.. probe con consultas mas sencillas y no da problemas..

pero con esta...

Código PHP:

SELECT 
*, IF(datos.d_semana=092012,'SI','NO') as hay FROM (clientes 
left join categorias on clientes
.cl_categoria_id=categorias.c_id
left join canales on clientes.cl_canal_id=canales.ca_id 
left join zonas on clientes
.cl_prov_id=zonas.z_id 
left join operadores on clientes
.cl_operador_id LIKE operadores.o_id 
left join usuarios on clientes
.cl_merchandiser=usuarios.u_id 
left join datos on clientes
.cl_id=datos.d_cliente and datos.d_semana='092012' 
where clientes.cl_merchandiser='1'  group by clientes.cl_id 
no tira..

en respuesta a si es imprescindible esa tabla si. es la mas imprescindible de todas por que lo que hace es almacenar visitas a puntos de venta... va mas o menos asi..

se visita el punto de venta, el tipo llena una planilla.. si hay stock de un modelo, de otro y asi con todos los modelos que deberian estar.. cada una de esos items crea un registro en la db...

para este script en particular yo tengo que sacar si se visito el punto de venta (que seria lo mas facil... ) y si no se visito lo cual es lo que se me hace cmplejo.. ya que la unica manera de ver que no se halla visitado es barrer toda la tabla dentro de las fechas y si no hay marcar como no..

gracias de nuevo.
  #4 (permalink)  
Antiguo 29/02/2012, 01:34
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Limit en un left join

Asegúrate de que tienes los índices correctamente creados, al menos uno por cada campo que usas para el JOIN. 150000 registros son muy pocos a no ser que trabajes en un Atari. Prueba también un LIMIT a ver qué pasa. Si el LIMIT lo resuelve rápido, entonces es un problema de recursos, si el LIMIT tarda igualmente, entonces es problema de la select.
__________________
Fere libenter homines, id quod volunt, credunt.
  #5 (permalink)  
Antiguo 14/03/2012, 20:06
 
Fecha de Ingreso: enero-2007
Mensajes: 285
Antigüedad: 17 años, 3 meses
Puntos: 21
Exclamación Respuesta: Limit en un left join

gracias reparados..

los indices estan bien.. en todos los joins al menos uno de los dos campos s un primari key, en cuanto.. al equipo no es un tari.. pero la verdad que 150000 registros si me complican la vida... y en cuanto a llimit ... de la unica forma qque pude usarlo.. lo use.. no tarda pero tampoco baja lo que necesito.. la cual la puse en mi segundo post..

agradeceria.. sigan ayudandome.. muchas gracias.
  #6 (permalink)  
Antiguo 14/03/2012, 22:04
Avatar de xxxivanxxx  
Fecha de Ingreso: julio-2010
Ubicación: /home
Mensajes: 114
Antigüedad: 13 años, 8 meses
Puntos: 21
Respuesta: Limit en un left join

Hola, te recomiendo que te pases por: Foro MYSQL alli estan los expertos :)
__________________
<?="Hello World"?> -> si te gustÓ dale +1
  #7 (permalink)  
Antiguo 23/03/2012, 21:08
 
Fecha de Ingreso: enero-2007
Mensajes: 285
Antigüedad: 17 años, 3 meses
Puntos: 21
Respuesta: Limit en un left join

che en el de mysql tampoco damos pie con bola.. alguien tiene ideas de como seguir con esto? ya agote todos los sitios de mysql y no encuentro respuesta ni salida.. agradezco cualquier aporte

Etiquetas: Ninguno
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:32.