例如,说我的表中有以下条目:
ID - 1
Name - Daryl
ID - 2
Name - Terry
ID - 3
Name - Dave
ID - 4
Name - Mitch
我最终希望在我的表中搜索一个特定名称,但显示所有关联的名称。例如,当前包含名称的表如下:
--
-- Table structure for table `members`
--
CREATE TABLE `members` (
`ID` int(255) NOT NULL,
`GuildID` int(255) NOT NULL,
`ToonName` varchar(255) NOT NULL,
`AddedOn` date NOT NULL,
`AddedByID` int(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data for table `members`
--
INSERT INTO `members` (`ID`, `GuildID`, `ToonName`, `AddedOn`, `AddedByID`) VALUES
(1, 1, 'Daryl', '2020-01-17', 5),
(2, 1, 'Terry', '2020-01-17', 5),
(3, 1, 'Mitch', '2020-01-17', 5),
(4, 1, 'Dave', '2020-01-17', 5);
--
以供引用。 GuildID 将是基于搜索者登录详细信息的默认搜索条件。有了这样的蜘蛛网,我将如何创建另一个表(或另一个列)以根据搜索条件创建组合搜索蜘蛛网结构?我在想一些事情:
CREATE TABLE `Associated`(
`ID` INT(255) NOT NULL,
`MainID` INT(255) NOT NULL,
`SecondaryID` INT(255) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `Associated` (`ID`, `MainID`, `SecondaryID`) VALUES
(1, 1, 2) -- Daryl Associated With Terry
(2, 1, 4) -- Daryl Associated With Dave
但我觉得这会产生一个过于复杂的值(value)结构,有很多冗余输入。有没有更有效的方法来创建统一搜索?整个操作的想法是每个名称都是个人。所以某些条目可以放在 Daryl 下,Terry 单独行动。但是,一次搜索将通过搜索一个名称将所有关联的名称汇集在一起,然后根据别名将总条目汇总在一起?
最佳答案
你可以试试这个
Select IFNULL(m.ToonName , members.ToonName) as ToonName
from members
LEFT JOIN Associated on Associated.MainID = members.ID
LEFT JOIN members as m on m.ID = Associated.SecondaryID
Where members.ToonName = "Mitch"
当你进入
“ Mitch ”在关联表中它会返回你 Daryl 并且当你没有关联 Id 时它会从成员表中返回名称。
如果你用 "Daryl" 检查这个,它会给你两个结果,
Select IFNULL(m.ToonName , members.ToonName) as ToonName
from members
LEFT JOIN Associated on Associated.MainID = members.ID
LEFT JOIN members as m on m.ID = Associated.SecondaryID
Where members.ToonName = "Daryl"
如果您希望在单个列中包含所有名称,您可以使用
GROUP_CONCAT
作为另一个答案中建议的@flash。关于mysql - 相关名称蜘蛛网,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59794822/