MySQL查询显示结果,但我不能被他们限制?
Posted
技术标签:
【中文标题】MySQL查询显示结果,但我不能被他们限制?【英文标题】:MySQL query shows results, but I can't restrict by them? 【发布时间】:2011-11-21 15:34:29 【问题描述】:您好,我有这样的疑问
SELECT
videos.*,
categories.cat_name ,
( SELECT COUNT( * ) AS count FROM user_favorites WHERE user_id = 'tw415656866' AND video_id = videos.video_id )is_favorite
FROM `videos`
INNER JOIN categories
ON categories.cat_id = videos.cat_id
WHERE
date <= '2011-11-21 09:12:18'
GROUP BY videos.video_id
ORDER BY (votesdown / votesup) ASC
LIMIT 0, 5
此代码运行良好,并返回如下表
video_id - 视频 ID cat_name - 类别名称 cat_id - 类别 ID 标题 - 视频标题 yt_id - youtube 视频 ID votesup - 投票 投反对票 - 投反对票 日期 - 添加日期 已发推文 - 0 / 1(1=已发推文) is_favorite - 0 / 1(1=收藏)
我想要做的是将这个添加到 WHERE 子句中
AND is_favorite = 1
如您所见,“is_favorite”作为列添加到数据集中,但我无法查询它,因为 mysql 说“is_favorite”列不存在。
确切的错误是... " 'where 子句' 中的未知列 'is_favorite'"
有什么想法吗?
非常感谢
【问题讨论】:
【参考方案1】:is_favorite
确实不是列,而是子查询的别名。尝试使用
HAVING is_favorite = 1
相反。有关WHERE
和HAVING
之间区别的说明,请参见例如http://www.w3schools.com/sql/sql_having.asp
所以你的查询应该是这样的:
SELECT
videos.*,
categories.cat_name ,
( SELECT COUNT( * ) AS count FROM user_favorites WHERE user_id = 'tw415656866' AND video_id = videos.video_id ) AS is_favorite
FROM `videos`
INNER JOIN categories ON categories.cat_id = videos.cat_id
WHERE date <= '2011-11-21 09:12:18'
GROUP BY videos.video_id
HAVING is_favorite = 1
ORDER BY (votesdown / votesup) ASC
LIMIT 0, 5
【讨论】:
这完美!非常感谢。 2 小时的问题按 20 个字符排序。马上!【参考方案2】:由于查询的处理顺序,is_favorite
别名在评估 WHERE 子句时不可用。您需要在 WHERE 中重复子查询。
【讨论】:
我明白了,您知道是否有更好更有效的查询方式吗?【参考方案3】:您的查询:
SELECT
videos.*,
categories.cat_name ,
T.is_favorite
FROM `videos`
INNER JOIN categories
ON categories.cat_id = videos.cat_id
Inner join
( SELECT video_id, COUNT( * ) AS IsFavorite
FROM user_favorites
WHERE user_id = 'tw415656866'
Group by video_id ) T
On T.video_id = videos.video_id
WHERE
date <= '2011-11-21 09:12:18'
And T.isFavorite =1
GROUP BY videos.video_id
ORDER BY (votesdown / votesup) ASC
LIMIT 0, 5
【讨论】:
以上是关于MySQL查询显示结果,但我不能被他们限制?的主要内容,如果未能解决你的问题,请参考以下文章