1

我有 3 个表(“新闻”、“类别”和作为连接表“元”)。我只是想过滤包含category_id作为过滤参数提供的新闻。我尝试了下面的查询(和类似的),但它返回了新闻表中的所有新闻。

那么如何过滤这些新闻meta_id (category_id)呢?

非常感谢!

//类别表
类别 ID | 分类名称
--------------------------
55 | 运动
56 | 政治

// 元表
元ID | 元类型 | rel_id | rel_type
--------------------------------------
55 | 类别 | 78345 | 消息
56 | 类别 | 91278 | 消息

笔记:
rel_id (in meta table) = id (in news table) // 在这种情况下我不需要它
meta_id(在元表中)= category_id(在类别表中)

SQL:

SELECT n.*
FROM `news` n
LEFT JOIN `metas` m ON m.meta_type='category'
    WHERE m.meta_id=55 AND n.status=1
GROUP BY n.id
ORDER BY n.id DESC
LIMIT 0,10
4

3 回答 3

1

最重要的是链接metasnews. 如果我正确阅读了您的问题,则链接字段为m.rel_id = n.id. 以下示例查询应过滤类别 55:

select  *
from    metas m
join    news n
on      m.rel_id = n.id
where   m.meta_type = 'category'
        and m.meta_id = 55
        and n.status = 1
order by
        n.id desc
limit   0, 10

注意不知道为什么你group by的查询中有一个。当然不需要过滤类别!

于 2012-09-15T11:56:49.167 回答
0

您必须在ON子句中添加条件。

选择 n.*
FROM `新闻` n
LEFT JOIN `metas` m ON m.meta_type='category' AND m.meta_id = n.category_id
    其中 m.meta_id=55 AND n.status=1
按 n.id 分组
按 n.id DESC 排序
限制 0,10
于 2012-09-15T11:12:42.950 回答
0
SELECT n.*
FROM `news` n
LEFT outer JOIN `metas` m ON m.meta_id = n.category_id
    WHERE m.meta_id=55 AND n.status=1 and m.meta_type='category'
GROUP BY n.id
ORDER BY n.id DESC
LIMIT 0,10
于 2012-09-15T11:28:43.420 回答