由于在SQL中有一个相对的新手,所以有两条建议。对表使用“别名”来帮助减少SuperLongTableNameReferencesForColumns,并始终限定查询中的列名。它可以帮助你的生活变得更加轻松,任何人在你之后都能更好地了解哪些列来自哪个表,特别是如果不同表中的列名相同。防止查询中出现歧义。我认为,从样本来看,你的左派可能是模糊的,但是确认B.ID加入TB.ID?通常情况下,一个“Team_ID”会在小组表中出现一次,除了其自身的“ID”外,每个blabbing条目还可以具有此类发布所来自的“Team_ID”。
SELECT
B.id,
B.mem_id,
B.the_blab,
B.blab_date,
B.blab_type,
B.device,
B.fromid,
TB.team_id
FROM
blabbing B
LEFT JOIN team_blabbing TB
ON B.ID = TB.ID
WHERE
TB.Team_ID IN (you can't do a direct $team_array here)
OR B.mem_id = SomeParameter
OR b.FromID = AnotherParameter
ORDER BY
B.blab_date DESC
LIMIT 20
你在哪里尝试$ team_array,你就必须打造出完整列表如预期,如
TB.Team_ID IN(1,4,18,23,58)
此外,不符合逻辑“||”或者,但SQL“或”
编辑 - 根据您的评论
这可以通过多种方式,如动态SQL构建和执行来完成,每一个ID多次调用,一旦和合并结果,或者,另外,通过加入另一个临时表,每天清理出来。
如果您有其他表格,例如“TeamJoins”,并且它有... 3列:日期,sessionid和team_id,您可以每天清除任何疑问,并且/或者继续清除每次使用相同的会话ID进行新查询(因为它看起来来自PHP)。有两个索引,一个在日期(以简化每日清除),另一个在会话(sessionID,team_id)上。
然后,循环执行以插入带有所标识的简单元素的“TempJoins”表。
然后,而不是硬编码的列表,你可以是部分更改为
...
FROM
blabbing B
LEFT JOIN team_blabbing TB
ON B.ID = TB.ID
LEFT JOIN TeamJoins TJ
on TB.Team_ID = TJ.Team_ID
WHERE
TB.Team_ID IN NOT NULL
OR B.mem_id ... rest of query
我不太确定你的问题是什么。 – RedFilter
就像你可以看到这些表格有一个不常见的“team_id”列。我需要能够为每个表设置where子句并在变量中使用team_id。这有帮助吗? –