【问题标题】:how to join Between four tables on mysql如何在mysql上的四个表之间加入
【发布时间】:2014-07-19 05:01:01
【问题描述】:

我有 4 个 mysql 数据库表,我如何加入它们之间

用户:

userid|username
   1  | mark
   2  | jon

awards_user:

awardid|userid
 1     |1    
 2     |2    

猫:

catid|catname
   1 | english
   2 | computer

奖项:

awardid|catid|awardname|awardlink
 1     |1    |best1    |pic link
 2     |2    |best2    |pic link

结果:

userid|username|catid|catname|awardid|awardname|awardlink

好的,这是我的尝试:

有效但只显示一个结果,当有成员持有奖项时 ، 我要展示所有的奖项,即使没有人持有它们。

$all_awards = $db->query_read(" SELECT * FROM " . TABLE_PREFIX . " users,awards_user,cat,awards
 WHERE
awards_user.awardid = awards.awardid
 AND
awards_user.userid = users.userid
 AND
awards.catid = cat.catid
 ");


CREATE TABLE `awards` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `forumid` int(10) unsigned NOT NULL,
  `name` varchar(100) NOT NULL default '',
  `link` varchar(100) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

-- 
-- Dumping data for table `awards`
-- 

INSERT INTO `awards` VALUES (1, 2, 'award one', 'http://www.mwadah.com/pict/noway9.gif');
INSERT INTO `awards` VALUES (2, 1, 'award 2', 'http://www.forum-ksa.com/up/uploads/images/forum-ksac59a7122d1.gif');

-- --------------------------------------------------------

-- 
-- Table structure for table `awards_user`
-- 

CREATE TABLE `awards_user` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `awardid` int(10) unsigned NOT NULL,
  `userid` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

-- 
-- Dumping data for table `awards_user`
-- 

INSERT INTO `awards_user` VALUES (2, 2, 2);

-- --------------------------------------------------------

-- 
-- Table structure for table `forum`
-- 

CREATE TABLE `forum` (
  `forumid` smallint(5) unsigned NOT NULL auto_increment,
  `title` varchar(100) NOT NULL default '',
  PRIMARY KEY  (`forumid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2;

-- 
-- Dumping data for table `forum`
-- 

INSERT INTO `forum` VALUES (1,'Main Category');
INSERT INTO `forum` VALUES (2,'Main Forum');
-- --------------------------------------------------------

-- 
-- Table structure for table `user`
-- 

CREATE TABLE `user` (
  `userid` int(10) unsigned NOT NULL auto_increment,
  `username` varchar(100) NOT NULL default ''
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

-- 
-- Dumping data for table `user`
-- 

INSERT INTO `user` VALUES (1,'admin');
INSERT INTO `user` VALUES (1,'mark');

【问题讨论】:

  • 继续。尝试一下。
  • 既然你知道JOIN 是必需的,你为什么不先尝试使用它,然后告诉我们你尝试了什么,如果它不起作用。

标签: mysql join


【解决方案1】:

您可以像这样构建JOIN 查询:

SELECT *
FROM users
JOIN awards_user USING(userid)
JOIN awards USING(awardid)
JOIN cat USING(catid)

然后你可以添加一个WHERE 子句来过滤结果。

【讨论】:

  • 不行或者我写错了$all_awards = $db->query_read(" SELECT * FROM " . TABLE_PREFIX . " user JOIN awards_user USING(userid) JOIN awards USING(id) JOIN forum USING(forumid) WHERE awards_user.awardid = awards.id AND awards_user.userid = user.userid AND awards.forumid = forum.forumid ");
  • 也许你应该把TABLE_PREFIX放在每个表名之前?使用我建议的形式,您不需要WHERE 子句!
  • 代码没有显示错误,但它只显示一个结果 [username,adwordname] 。 TABLE_PREFIX没问题
  • 你应该复制你的数据库结构和sqlfiddle.com上的一些内容,以便我们看到它
  • 我无法在这个站点中添加我的 sql,一直显示错误,我把它放在我的第一篇文章中
【解决方案2】:
SELECT awards.userid, 
       username, 
       awards.catid, 
       catname, 
       awards.awardid, 
       awardname, 
       awardlink 
FROM   users, 
       awards_user, 
       cat, 
       awards 
WHERE  awards_user.userid = users.userid 
       AND awards_user.awardid = awards.awardid 
       AND cat.catid = awards.catid; 

【讨论】:

    猜你喜欢
    • 2022-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    相关资源
    最近更新 更多