2013-01-25 25 views
0

好吧,我很难用良好的语言来解释这一点,但我从我的数据库中的表中选择所有默认头像,其中包含所有头像,不管是否隐藏..MySQL只在数据存在于第二个表

forum_title中的隐藏字段默认为0(对每个用户都可用),有些值为1(用户将不得不解锁它,它不会自动提供)。 无论如何,当他们找到头像时,它会被插入到user_title中。

所以user_title跟踪的user_is和title_id上​​的...

但我希望将所有用户显示默认的化身连同他们所隐藏的,他们解锁.. 的SQL运行正常,直到我添加了WHERE子句因为第一个表没有user_id列......我只想说WHERE user_title.user_id = $ _SESSION ['userid']如果他们之前已经解锁了化身(显然或者第二个表中没有数据)我离开的原因加入了它)

这是使用CodeIgniter,但我会发布MySQL和CodeIgniter版本,所以人们可以帮助我!

$this->db->select('id, phrase'); 
$this->db->from('forum_title'); 
$this->db->join('user_title', 'title_id = id', 'left'); 
$this->db->where('user_title.user_id', $this->session->userdata('user_id')); 
$this->db->order_by('hidden'); 

然后在这里是MySQL:

SELECT id, phrase 
FROM forum_title 
LEFT JOIN user_title ON title_id = id 
WHERE user_title.user_id = $_SESSION['user_id'] 
ORDER BY hidden; 

谢谢!

SQL为FORUM_TITLE表:

CREATE TABLE IF NOT EXISTS `forum_title` (
    `id` tinyint(3) NOT NULL AUTO_INCREMENT, 
    `phrase` varchar(50) NOT NULL, 
    `hidden` tinyint(1) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ; 

INSERT INTO `forum_title` (`id`, `phrase`, `hidden`) VALUES 
(1, 'OMGITSATITLE', 0), 
(2, 'DStable Addict', 0), 
(3, 'Randomnezz', 0), 
(4, 'I Eat Hair...', 0), 
(5, 'IMMA STAFFY', 1); 

SQL为user_title表:

CREATE TABLE IF NOT EXISTS `user_title` (
    `user_id` bigint(20) NOT NULL, 
    `title_id` tinyint(3) NOT NULL, 
    PRIMARY KEY (`user_id`,`title_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

现在我想要的结果:

总是显示为默认(隐藏= 0)的标题,但是显示hidden = 1以及如果他们已经解锁了,它将在user_title表中,如果他们已经解锁它。

+0

你有没有考虑过联盟? – Omar

回答

0

你是哪里声明将结果限制为与用户ID匹配的结果,则需要指定其他结果。将以下内容添加到您的查询中,如果我理解您的权利,那么应该可以解决问题。

$this->db->or_where('hidden', 0); 
0
SELECT id 
    , phrase 
    FROM forum_title 
    LEFT 
    JOIN user_title 
    ON title_id = id 
    AND user_title.user_id = $_SESSION['user_id'] 
ORDER 
    BY hidden; 
+0

这是让东西来显示,但user_id(4,我)还没有发现任何解锁的化身,它仍然拉动隐藏的,即使他们没有找到它们。所以我把title_id = id和user_id不是空和user_id = $ _SESSION ['user_id'],但它仍然拉动它..有反正只显示那些隐藏标记为1如果他们在user_title表中找到? – Peanut

+0

呃,什么?考虑为上述提供DDL(CREATE和INSERT)以及预期/期望的结果。 – Strawberry

+0

增加了很多更多的细节(:谢谢! – Peanut

相关问题