mysql - 对多对,跨表查询,sql语句怎么写,急,在线等
怪我咯
怪我咯 2017-04-17 11:36:21
[MySQL讨论组]

下面是数据库结构,Relationships是文章表和类别、标签表的关系表,他们是多对多。

我现在在aid=1的详情页面,查询相同相同类别的文章。 这个sql语句怎么写?

目前实现了想要的功能,感谢 @rockman

    $midSql = 'SELECT relationships.mid FROM relationships INNER JOIN metas ON metas.mid = relationships.mid WHERE relationships.aid = :aid AND metas.type =  "category"';

    $aidSql = 'select relationships.aid from relationships where relationships.aid != :aid AND relationships.mid IN ( '.$midSql.' )';

    $sql = 'select articles.aid,articles.title fromarticles where articles.aid IN ( '.$aidSql.' )';

可能你们能有更好的方案,可以一起探讨下。

Metas 类别、标签表
category是类别,tag是标签

Articles 文章表
aid、title、created、modified、text、viewNum
1   title1
2   title2
3   title3

Metas 类别、标签表
mid、name、count、parent、type 
1 、category1、0、0、category
2 、category1、3、1、category
3 、 tag1、  3 、0、tag 

Relationships 关系表
aid、mid
1、2
1、3
2、2
2、3
3、2
3、3
怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(1)
ringa_lee

能否弄成两步来实现呢?

先获取该文章的类别,然后再搜索这几个类别下的文章列表(把当前文章排除掉)

SELECT r1.aid FROM Relationships r1 WHERE r1.aid!=1 AND r1.mid IN (SELECT r2.mid FROM Relationships r2 LEFT JOIN Metas m ON m.mid=r2.mid WHERE r2.aid=1 AND m.type='category')

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号