= \'$search_total_rating\" being in the wro" />
开发者

Mysql query - JOINS and WHERE clause, beginner here :)

开发者 https://www.devze.com 2023-03-31 09:48 出处:网络
having difficulties with a form and mysql. 3 tables, 1 sum of a tables values. The form provides the value to search, but it does not work with the \"WHERE >= \'$search_total_rating\" being in the wro

having difficulties with a form and mysql. 3 tables, 1 sum of a tables values. The form provides the value to search, but it does not work with the "WHERE >= '$search_total_rating" being in the wrong place, i am doing something very wrong here.

        $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, sh开发者_如何学运维op_id FROM ratings GROUP BY shop_id) as temp on coffeeshops.shop_id=temp.shop_id WHERE >= '$search_total_rating'");

I do not fully understand this, but what i am trying to do is WHERE the total rating sum is >= selected rating. I am trying to access final_total which is not an actual column in my database, that is why SUM is being used to get the total rating for each shop. Hopefully it is a minor shuffle of the code. Thanks


You should use having instead of where

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'


You have already calculated your total in the subquery. No need for a second 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'

You could also use a HAVING in the subquery:

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 
0

精彩评论

暂无评论...
验证码 换一张
取 消