gpt4 book ai didi

mysql - 更改 mysql 中的连接

转载 作者:行者123 更新时间:2023-11-29 00:39:31 25 4
gpt4 key购买 nike

我有 2 个表,faq 和 faq_categories...我有一个加入工作,到目前为止,我是一个快乐的露营者。

但是...需求改变了,我必须改变连接,但我不知道该怎么做

这是当前运行良好的代码:

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

到目前为止,所有常见问题解答都属于一个类别...但是从现在开始,将会有不属于任何类别的常见问题解答...这让事情变得复杂,至少对我而言。

我应该如何更改此代码以显示没有 catid 的常见问题解答?

这是我的表格:

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 ;

最佳答案

对于那些没有类别的,我们假定您的意思是 faq.catid 将是 NULL。您的表定义根本不需要更改。这只需要将您的INNER JOIN更改为LEFT JOIN。没有类别的常见问题解答将在输出中显示 NULLforfaq_categories.categoryname`:

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

不过,我现在鼓励您预见到 FAQ 必须属于多个类别的时间。为此,您需要创建一个包含 faqidcatid 的连接表。每个 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'

关于mysql - 更改 mysql 中的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12868409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com