Foros del Web » Programando para Internet » PHP »

Having

Estas en el tema de Having en el foro de PHP en Foros del Web. Saludos. Tengo 2 tablas. Tabla 1: Tipo_Casa ------------------------ id_tipo_casa nombre Table 2: Casas ------------------------ id_casa id_tipo_casa otro Estoy mostrando un listado de las casas por ...
  #1 (permalink)  
Antiguo 28/06/2005, 15:02
Avatar de José Molina  
Fecha de Ingreso: enero-2002
Ubicación: USA
Mensajes: 768
Antigüedad: 15 años, 11 meses
Puntos: 1
Having

Saludos.

Tengo 2 tablas.

Tabla 1: Tipo_Casa
------------------------
id_tipo_casa
nombre


Table 2: Casas
------------------------
id_casa
id_tipo_casa
otro

Estoy mostrando un listado de las casas por categoría, utilizando un solo query:
Código PHP:
 SELECT a.nombreb.otro FROM Tipo_Casa AS aCasas AS b WHERE a.id_tipo_casa b.id_tipo_casa ORDER BY a.nombre 

Luego con un juego con PHP mostraba el titular de cada categoría con las casas dentro.

Todo bien, pero me estoy dando cuenta que necesito mostrar solamente 4 casas por categoría y un simple LIMIT 0,4 no me funciona porque me traería solamente los primero 4 registros que pueden o no ser de una misma categoría.

Estaba intentando con el HAVING pero nada que ver:
Código PHP:
 SELECT a.nombreb.otro FROM Tipo_Casa AS aCasas AS b WHERE a.id_tipo_casa b.id_tipo_casa GROUP BY a.nombre HAVING a.id_tipo_casa 

Pero esta claro que así no es el asunto porque no me funciona.

Bien podría dividir en 2 query: Recorro primero los Tipos de Casa y dentro de ese While realizo otro query buscando las casas con ese mismo id_tipo_casa con un LIMIT 0,4

El asunto es que no puedo dividir en 2 querys, porque el código es gigante y quería ver si a alguién se le ocurre otra cosa para matarlo con 1 solo query.

Gracias
__________________
José Molina
La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente.
  #2 (permalink)  
Antiguo 28/06/2005, 15:55
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 14 años, 4 meses
Puntos: 0
A mi pasó exactamente eso con un top10 en dónde las canciones podían estar o no en el listado ya que se necesitaban 3 votos por canción para poder formar parte del top, si lo hacía con limit podía salir alguna canción que no tuviera los 3 votos mínimos, de manera que así no me valía, al final lo hice con código php, simplemente de los resultados que me devolvía la consulta mostraba los 10 que tuvieran 3 votos (con un bucle for), quizás sea algo cutre pero funciona.

Si ha alguien se le ocurre alguna otra manera a mí tb me gustaría saberlo.

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
  #3 (permalink)  
Antiguo 28/06/2005, 16:09
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Seguramente estas trabajando con una version mysql 4.1<.
Por lo que lo mejor es hacer dos querys (es lo mejor de veras) como decis, uno que levante las categorias, y otro que levante las casas de esas categorias, con un limit, y el orden que quieras.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #4 (permalink)  
Antiguo 29/06/2005, 05:09
Avatar de José Molina  
Fecha de Ingreso: enero-2002
Ubicación: USA
Mensajes: 768
Antigüedad: 15 años, 11 meses
Puntos: 1
Caramba pero no habrá manera de solucionarlo con 1 solo query??
__________________
José Molina
La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente.
  #5 (permalink)  
Antiguo 29/06/2005, 08:02
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Tenes que hacer un inner o left join, esto te traera resultados repetidos, para lo que debes manejarlo luego desde php. Esto haria que esta consulta consuma 10 veces mas que haciendo dos consultas.

Haz las cosas prolijamente y verás al final del día resultados satisfactorios ;).
__________________
Mi punto de partida es Que Bueno Lo Nuevo
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 03:18.