有个多对多的问题希望能有大侠给解答一下
现在有三个表 最好不用子查询 (因为是改程序,程序上貌似有限制,用子查询会显示查询语句有危险。。。)
三个表是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表进行关联
我刚想到了多对多但是不知道应该怎么弄。。。。
[解决办法]
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>