SQL 元表帮助 (mysql)



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

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

多谢!

类别表category_id |category_name---------------------------55 |运动56 |政治元表meta_id |meta_type |rel_id |rel_type---------------------------------------55 |类别 |78345 |新闻56 |类别 |91278 |新闻笔记:rel_id(在元表中)= id(在新闻表中)//在这种情况下我不需要它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

最重要的是将metas链接到news。 如果我正确阅读了您的问题,链接字段为 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。 当然不需要过滤类别!

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

选择 n.*来自 "新闻" n左连接"元"m 在 m.meta_type='类别' 和 m.meta_id = n.category_id    其中 m.meta_id=55 且 n.status=1按 n.id 分组按 n.id 订购限制 0,10
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

最新更新