例如,说我的表中有以下条目:

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/

10-11 22:23
查看更多