gpt4 book ai didi

php - MySQL 通过多个内连接进行过滤

转载 作者:行者123 更新时间:2023-11-29 08:51:09 24 4
gpt4 key购买 nike

我目前正在努力找出针对我所处情况的解决方案。我将为您提供一些有关数据库结构的背景知识:表“实体”具有列Ent_ID(AI、Int)、Ent_Type(枚举、“位置、角色、房屋、军队”)和<强>Obj_ID(整数)。Obj_ID 与相关表中的 ID 匹配。例如,“位置”表包含列 Obj_ID(AI、Int)、Loc_Name(文本)和 Loc_Desc(文本)。

根据日期,角色可能位于不同的位置,因此我有一个“TimeSensitives”表来存储此类内容。该表包含列TS_ID(AI、Int)、Ent_ID(Int)、TS_Start(Float)、TS_End ( float )和TS_Content(文本)。 Ent_ID 是哪个角色正在提供某些信息(例如位置)。位置的 Ent_ID 进入 TS_Content

所以,正如你可能想象的那样,我有很多地点,每个地点在不同的日期都有不同的角色。我的问题是,我想要搜索一个名称与搜索过滤器类似的位置,或者其中有一个名称与搜索过滤器类似的字符。

到目前为止,我已经循环遍历了类型为“位置”的每个实体,然后对于每个实体,我都循环了当前存在的所有字符。这是我的代码:

SELECT * 
FROM Entities
INNER JOIN Locations
ON Entities.Obj_ID=Locations.Obj_ID
WHERE Entities.Ent_Type='Locations'
AND Loc_Name LIKE ?

然后对于每一个:

SELECT * 
FROM TimeSensatives
INNER JOIN Entities
ON TimeSensatives.Ent_ID=Entities.Ent_ID
INNER JOIN Characters
ON Entities.Obj_ID=Characters.Obj_ID
WHERE TS_Type='Location'
AND TS_Content=?
AND TS_Start<=?
AND TS_End>=?

正如您可能已经看到的,当前在选择地点时仅考虑搜索过滤器。我现在也想在字符上实现搜索过滤器,但它需要显示不一定具有匹配名称但确实有一个具有匹配名称的字符的位置。我希望这是有道理的。我当前的代码不会选择任何没有匹配名称的位置,因此没有机会搜索匹配的角色名称。

有没有办法将其合并到一个sql语句中?或者有人能想出一种方法来实现我想要做的事情吗?

任何帮助将不胜感激,如果您需要更多信息,请询问:)卡勒姆

最佳答案

SELECT
Entities.*,
Locations.Loc_Name as Loc_Name
FROM
Entities
INNER JOIN Locations ON Entities.Obj_ID=Locations.Obj_ID
WHERE
Entities.Ent_Type='Locations'
AND Loc_Name LIKE ?

UNION

SELECT
LocEnt.*,
Locations.Loc_Name as Loc_Name
FROM
TimeSensatives
INNER JOIN Entities AS CharEnt ON TimeSensatives.Ent_ID=CharEnt.Ent_ID
INNER JOIN Characters ON Entities.Obj_ID=Characters.Obj_ID
INNER JOIN Entities AS LocEnt ON TS_Content.Ent_ID=LocEnt.Ent_ID
INNER JOIN Locations ON LocEnt.Obj_ID=Locations.Obj_ID
WHERE
TS_Type='Location'
AND TS_Start<=?
AND TS_End>=?
AND Char_Name LIKE ?

将为您提供所有需要的位置及其名称

关于php - MySQL 通过多个内连接进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11217835/

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