我需要一个基于他所关注的电视节目,为用户查找推荐电视节目的查询。 做这个,我有以下表格:WHERE子句中的MySQL变量
包含至极显示用户为以下,看到事件的百分比表
Progress
(解决这个问题,我们可以假设我只有一个用户数据库)表
Suggested
包含_id1
,_id2
和value
(值是显示使用id =_id1
并用ID的显示之间的连接的强度=_id2
:越value
是很大的,越在S如何有共同之处)。 请注意,在此表中适用交换属性,因此id1
和_id2
之间的连接强度与_id1
和_id2
相同。而且不会有两行如ROW1._id1 = ROW2._id2 AND ROW1._id2 = ROW2._id1表
ShowCache
包含有关电视节目的详细信息,如名字等。
下面的查询是什么,我试图做的,但结果是空集:
SET @a = 0; //In other tests this line seem to be necessary
SELECT `ShowCache`.*,
(SUM(value) * (Progress.progress)) as priority
FROM `Suggested`,`ShowCache`, Progress
WHERE
((_id2 = Progress.id AND _id1 NOT IN (SELECT id FROM Progress) AND @a:=_id1)//There is a best way to set a variable here?
OR
(_id1 = Progress.id AND _id2 NOT IN (SELECT id FROM Progress) AND @a:=_id2))
AND `ShowCache`._id = @a //I think that the query fails here
GROUP BY `ShowCache`._id
ORDER BY priority DESC
LIMIT 0,20
我知道这个问题是有关变量的用法,但我解决不了的。任何帮助真的很感激。
PS:的主要问题是,(由于可交换礼),不变量,我需要两个查询,至极大约需要3秒开始执行(查询比上述更复杂)。我真的试图做一个单一的查询来完成这项任务
PPS:我也绑定了XOR操作,导致无限循环?!?!?这里的WHERE子句我想:
((_id2=Progress.id AND @a:=_id1) XOR (_id1=Progress.id AND @a:=_id2)) AND `ShowCache`._id = @a
编辑: 我想出这个WHERE不使用任何变量条件:
(_id2 = Progress.id OR _id1 = Progress.id)
AND `ShowCache`._id = IF(_id2 = Progress.id, _id1,_id2)
AND `ShowCache`._id NOT IN (SELECT id FROM Progress)
它的工作原理,但它是非常缓慢的。
jquery和你的问题有什么关系? – razzak 2013-04-23 16:08:45
Ops ...错误的标签,我的意思是查询 – Spotlight 2013-04-23 17:03:15