0

我确信可以对我的查询进行广泛优化,但不能说出我的想法。

我所拥有的是为我的成员提供的类似帖子/评论的概念。他们可以选择与特定的人或所有人共享它。所以从这里我知道我的查询可能会导致重复的结果(如果我能让它首先工作的话)。我需要在查找用户 ID 时获得一个独特的“ciID”,以及在其他地方提到的任何潜在 ID。出于 3 个不同的原因,成员的 ID 存储在 3 个不同的列中。

mID 是成员自己,然后 sharedWith 和 whos_with 有点为自己说话。我将 id 存储在 sharedWith 和 whos_with 中,1111:2222:3333但总而言之,我必须在所有 3 列中搜索共享的成员 ID 和 whos 列,以确保获得通过数组中的函数传递的 ID 的所有结果。在通过循环构建查询之后,我想出了一个类似的查询

select DISTINCT(ciID),* from user_posting 
where (mID = 21 OR sharedWith LIKE '%21%' OR whosWith LIKE '%21%') 
or (mID = 22 OR sharedWith LIKE '%22%' OR whosWith LIKE '%22%') 
or (mID = 45 OR sharedWith LIKE '%45%' OR whosWith LIKE '%45%')
limit 1

在某处我有一个我没有注意到的语法错误,我需要一双眼睛来帮助我

4

1 回答 1

3

这绝对是错误的:

select DISTINCT(ciID),* from user_posting 

它应该是:

select DISTINCT(up.ciID), up.* from user_posting up 

但是我不太确定这是否会返回预期的结果。

我认为你需要重新设计你的表结构。使用 LIKE 进行选择并不能很好地扩展。

于 2012-07-04T08:47:04.363 回答