仅在子查询中有计数的位置加入表

时间:2015-04-13 17:30:13

标签: php sql-server join

我制作了一个搜索引擎,其中页面访问者可以根据4种不同的属性搜索音乐艺术家,艺术家的评级为0-100,并输入指定属性的最小值,访问者可以查看评级大于或等于所需值的艺术家列表。在查询之后,我已经设置了fetch数组和foreach语句,但是我遇到了查询问题。

我尝试过以下查询语句。这是一个有凝聚力的陈述:

SELECT users.username, databaseimage.profile 
// users.username is artists username
// databaseimage is table where profile pic is stored

FROM users 
JOIN databaseimage ON users.id = databaseimage.user_id 
JOIN attributes ON users.id = attributes.userid 
// user.id, database.user_id, and attribute.userid all correspond to the id of a specified artist

// attributes is table where attributes are stored

上面的内容为我提供了所需的所有数据。下面是我需要帮助的部分。我想缩小数据范围,以便只有与属性等级(astr)大于$ selectnumber(访问者指定的数字)的艺术家对应的数据在结果数组。这就是我的尝试。

WHERE attribute.userid 
HAVING COUNT() IN (
  SELECT userid, ($attribute DIV TotalRatingEntries) as attr 
  FROM attributes 
  WHERE attr >= '$selectnumber'
)

1 个答案:

答案 0 :(得分:0)

据我了解数据结构,我可以提出以下查询:

SELECT 
    users.username, 
    databaseimage.profile
FROM 
    users 
    JOIN databaseimage ON users.id = databaseimage.user_id 
    JOIN attributes ON users.id = attributes.userid
WHERE 
    attribute.userid IN 
    (
        SELECT 
            userid
        FROM 
            attributes  
        group by
            userid,TotalRatingEntries
        having
            sum(attribute)/TotalRatingEntries >= '$selectnumber'
    )

请提供有关这3张桌子的更多详情,或许我误解了一些事情。