首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

有个多对多的有关问题希望能有大侠给解答一下

2012-02-16 
有个多对多的问题希望能有大侠给解答一下现在有三个表 最好不用子查询 (因为是改程序,程序上貌似有限制,用

有个多对多的问题希望能有大侠给解答一下
现在有三个表 最好不用子查询 (因为是改程序,程序上貌似有限制,用子查询会显示查询语句有危险。。。)
三个表是forum ,label,related
forum 里有主键ID,label里有主键ID和labelName两列,related里有主键ID和forumID还有labelID。

select forum.ID from forum LEFT JOIN related ON forum.ID = related.forumID LEFT JOIN label ON label.ID = related.labelID where (label = '你好' and label = '你很好') or label = '你不好'

于是现在查询结果是空。。。。。。。
我知道貌似是(label = '你好' and label = '你很好') 这个地方有点逻辑问题
于是乎有没有高手能提供个解决办法什么的。。。。。。
不一定非得用related表进行关联
我刚想到了多对多但是不知道应该怎么弄。。。。

[解决办法]

SQL code
mysql> select * from forum;+-----+----------+| fid | name     |+-----+----------+|   1 | Discuz!  ||   2 | 默认版块 ||   3 | 影音     ||   4 | 情感     ||   5 | 生活     ||   6 | 休闲     ||   7 | 游戏     ||   8 | 体育     ||   9 | 电影     ||  10 | 音乐     ||  11 | 视频     ||  12 | 电视     ||  13 | 交友     ||  14 | 单身     ||  15 | 诉说     ||  16 | 婚恋     ||  17 | 美食     ||  18 | 购物     ||  19 | 美容     ||  20 | 健康     ||  21 | 汽车     ||  22 | 时尚     ||  23 | 星座     ||  24 | 摄影     ||  25 | 宠物     ||  26 | 动漫     ||  27 | 旅游     ||  28 | 设计     ||  29 | 足球     ||  30 | 篮球     ||  31 | 羽毛球   ||  32 | 乒乓球   ||  33 | 网游     ||  35 | 单机     ||  36 | 动漫区   ||  37 | 漫画区   ||  38 | 动漫一   ||  39 | 动漫二   ||  40 | 动漫三   |+-----+----------+39 rows in set (0.00 sec)mysql>mysql> select * from label;+----+--------+| ID | Name   |+----+--------+|  1 | 新番   ||  2 | 星期一 |+----+--------+2 rows in set (0.00 sec)mysql>mysql> select * from related;+----+---------+---------+| ID | labelID | forumID |+----+---------+---------+|  1 |       1 |      38 ||  2 |       2 |      38 ||  3 |       1 |      39 |+----+---------+---------+3 rows in set (0.00 sec)mysql> select f.fid, f.name    -> from forum f inner JOIN related r1 ON r1.forumID = f.fid    ->  inner join related r2 on r2.forumID = f.fid    ->  inner JOIN label l1 ON r1.labelID = l1.ID    ->  inner JOIN label l2 ON r2.labelID = l2.ID    -> where l1.Name = '新番' and l2.Name = '星期一';+-----+--------+| fid | name   |+-----+--------+|  38 | 动漫一 |+-----+--------+1 row in set (0.08 sec)mysql> 

热点排行