0

わかりました、これを良い言葉で説明するのは難しいですが、非表示かどうかにかかわらず、すべてのアバターを保持するデータベース内のテーブルからすべてのデフォルトのアバターを選択しています..

forum_title の非表示フィールドはデフォルトで 0 (すべてのユーザーが利用可能) で、一部の値は 1 です (ユーザーはロックを解除する必要があり、自動的には利用できません)。とにかく、アバターが見つかると、それが user_title に挿入されます。

したがって、user_title は user_is と title_id を追跡します...

しかし、ロックを解除した非表示のアバターと一緒に、すべてのデフォルトのアバターをユーザーに表示したい.最初のテーブルにはuser_id列がないため、WHERE句を追加するまでSQLは正常に機能します... WHERE user_titleとだけ言いたいです.user_id = $_SESSION['userid'] 以前にアバターのロックを解除したことがある場合 (明らかに、または 2 番目のテーブルにデータがないため、参加したままにした理由)

これは 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

ステートメントが結果をユーザー ID に一致するものに制限しているところです。必要な他のものも指定する必要があります。クエリに次を追加してください。あなたの理解が正しければ、問題は解決するはずです。

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