Consulta Mysql - cláusula JOINS y WHERE, principiante aquí :)

tener dificultades con un formulario y mysql. 3 tablas, 1 suma de valores de una tabla. El formulario proporciona el valor para buscar, pero no funciona con "WHERE> = '$ search_total_rating" en el lugar equivocado, estoy haciendo algo muy mal aquí.

        $result = mysql_query("SELECT coffeeshops.*, services.*, ratings.*, sum(temp.total) as          final_total FROM coffeeshops inner join services on coffeeshops.shop_id=services.shop_id
inner join ratings on coffeeshops.shop_id=ratings.shop_id
    inner join (select SUM(comfort + service + ambience + friendliness + spacious)/(5) / COUNT(shop_id) AS total, shop_id FROM ratings GROUP BY shop_id) as temp on coffeeshops.shop_id=temp.shop_id WHERE >= '$search_total_rating'");

No entiendo completamente esto, pero lo que estoy tratando de hacer es DONDE la suma de calificación total es> = calificación seleccionada. Estoy tratando de acceder a final_total, que no es una columna real en mi base de datos, por eso se usa SUM para obtener la calificación total de cada tienda. Con suerte, se trata de una reproducción aleatoria menor del código. Gracias

preguntado el 27 de agosto de 11 a las 18:08

2 Respuestas

Deberías usar es en lugar de dónde

SELECT coffeeshops.*, services.*, ratings.*, sum(temp.total) as final_total 
FROM coffeeshops inner join services on coffeeshops.shop_id=services.shop_id
inner join ratings on coffeeshops.shop_id=ratings.shop_id
inner join (
      select SUM(comfort + service + ambience + friendliness + spacious)/5/    COUNT(shop_id) AS total, shop_id 
FROM ratings GROUP BY shop_id) 
as temp on  coffeeshops.shop_id=temp.shop_id 
 having final_total >= '$search_total_rating'

Respondido 27 ago 11, 22:08

en parte, pero no completamente, la publicación de abajo lo solucionó, creo :) - Renai

Ya ha calculado su total en la subconsulta. No es necesario un segundo SUM().

SELECT coffeeshops.*
     , services.*
     , ratings.*
     , temp.total as final_total 
FROM coffeeshops
  inner join services
    on coffeeshops.shop_id = services.shop_id
  inner join ratings 
    on coffeeshops.shop_id = ratings.shop_id
  inner join
    ( select SUM(comfort + service + ambience + friendliness + spacious) / 5
             / COUNT(shop_id) AS total
           , shop_id 
      FROM ratings 
      GROUP BY shop_id
    ) as temp 
    on coffeeshops.shop_id = temp.shop_id 
WHERE temp.total >= '$search_total_rating'

También podrías usar un HAVING en la subconsulta:

SELECT coffeeshops.*
     , services.*
     , ratings.*
     , temp.total as final_total 
FROM coffeeshops
  inner join services
    on coffeeshops.shop_id = services.shop_id
  inner join ratings 
    on coffeeshops.shop_id = ratings.shop_id
  inner join
    ( select SUM(comfort + service + ambience + friendliness + spacious) / 5
             / COUNT(shop_id) AS total
           , shop_id 
      FROM ratings 
      GROUP BY shop_id
      HAVINGE total >= '$search_total_rating'
    ) as temp 
    on coffeeshops.shop_id = temp.shop_id 

Respondido 27 ago 11, 23:08

arreglado :) muchas gracias, por lo que fue el uso de 2 SUM. muchas gracias, me salvó unos días más de juguetear :) - Renai

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.