1

私は faq と faq_categories の 2 つのテーブルを持っています...私はその作業に参加しています。これまでのところ、私は幸せなキャンパーでした。

しかし...要件が変わり、結合を変更する必要がありますが、その方法がわかりません

正常に動作する現在のコードは次のとおりです。

SELECT faq.* , faq_categories.categoryname 
                                  FROM faq 
                                  JOIN faq_categories
                                  ON ( faq.catid = faq_categories.catid)

これまでのところ、すべてのよくある質問は 1 つのカテゴリに属していますが、これからは、どのカテゴリにも属さないよくある質問があり、少なくとも私にとっては複雑です。

catid を持たない faq を表示するには、このコードをどのように変更すればよいですか?

ここに私のテーブルがあります:

CREATE TABLE IF NOT EXISTS `faq_categories` (
`catid` int(11) NOT NULL AUTO_INCREMENT,
`parentid` int(11) DEFAULT NULL,
`categoryname` varchar(255) NOT NULL,
`categoryname_en` varchar(255) DEFAULT NULL,
`description` text,
`description_en` text,
`metatags` text,
`metatags_en` text,
`sorder` int(11) NOT NULL,
`visible` tinyint(4) NOT NULL,
`categoryphoto` varchar(255) DEFAULT '',
PRIMARY KEY (`catid`),
KEY `parentid_fk` (`parentid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=204 ;


CREATE TABLE IF NOT EXISTS `faq` (
`faqid` int(11) NOT NULL AUTO_INCREMENT,
`catid` int(11) DEFAULT NULL,
`question` text NOT NULL,
`question_en` text NOT NULL,
`answer` text,
`answer_en` text,
`metatags` text,
`metatags_en` text,
`sorder` tinyint(4) DEFAULT NULL,
`visible` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`faqid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
4

1 に答える 1

1

カテゴリがないものについては、出力でINNER JOIN LEFT JOIN NULL faq_categories.categoryname` にfaq.catidなることを意味すると仮定します。NULL. Your table definitions don't need to change at all. That will only require changing yourto a. The FAQs with no category will show afor

SELECT 
  faq.* , 
  faq_categories.categoryname 
FROM
  faq 
  LEFT JOIN faq_categories  ON ( faq.catid = faq_categories.catid)

ただし、FAQ が複数のカテゴリに属さなければならない時期を予測することをお勧めします。faqidそのためには、とを含む結合テーブルを作成する必要がありますcatid。ごとに多くの行が存在する可能性がありますfaqid:

CREATE TABLE faq_in_categories (
  faqid INT(11) NOT NULL,
  catid INT(11) NOT NULL,
  PRIMARY KEY (faqid, catid),
  FOREIGN KEY (faqid) REFERENCES faq (faqid),
  FOREIGN KEY (catid) REFERENCES faq_categories (catid)
);

このモデルでfaq.catidは、カテゴリのメンバーシップが結合テーブルで定義されているため、列を削除します。これは多対多の関係です。

照会者:

SELECT 
  faq.*
  categories.*
FROM
  faq
  JOIN faq_in_categories ON faq.faqid = faq_in_categories.faqid
  JOIN categories ON faq_in_categories.catid = categories.catid
WHERE faq.faqid = 'some faqid'
于 2012-10-12T23:28:07.000 に答える