0

好的,我很难用好话来解释这一点,但我正在从我的数据库中的一个表中选择所有默认头像,该表包含所有头像,无论是否隐藏..

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;

谢谢!

forum_title 表的 SQL:

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);

user_title 表的 SQL:

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),但如果他们解锁了它,也会显示隐藏的 = 1,如果他们解锁了它,它将在 user_title 表中。

4

2 回答 2

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;
于 2013-01-25T00:27:33.500 回答
0

您在 where 语句将您的结果限制为与用户 ID 匹配的结果,您还需要指定您想要的其他结果。将以下内容添加到您的查询中,如果我理解正确,应该可以解决问题。

$this->db->or_where('hidden', 0); 
于 2013-01-25T04:30:43.157 回答