2013-04-09 49 views
0

对不起,如果我重复这个问题,但是,我还没有找到任何可以帮助我的东西。mysql如何比较同一个表中的两行?

无论如何,这是一个问题:

我正在写一个约会aplication,在此应用程序,我在共同关心的部分窃听。

我的意思是,你将有3个选择关于一个人(你想与他/她约会?是的,也许,不是)。所以,我创建了一张表,它保存了你的userId,你想要约会的人的身份,以及你的回复(是的,不,或者也许)。

有没有办法比较,如果你说是或可能,而另一个人说是或可能,会返回像共同人一样的东西?

类似的东西(如果你说是或否,并且该人说是或否则选择所有共同人)。

对不起,如果听起来很混乱,但如有疑问,我可以更好地解释。

我的英语没有帮助,虽然....我是巴西人

+0

你能给样本记录吗? – 2013-04-09 14:46:42

+1

请包含您的表格模式。 – cdhowie 2013-04-09 14:46:45

+0

也许MINUS运算符...'从tableName中选择A,B,C,其中uniqueKey = 1 MINUS从tableName中选择A,B,C,其中UniqueKey = 2' Boa Sorte! – xQbert 2013-04-09 14:47:32

回答

5

这样的事情,

SELECT LEAST(a.UserID, a.PersonID) AS Person1, 
     GREATEST(a.UserID, a.PersonID) AS Person2, 
     a.Response 
FROM TableName a 
     INNER JOIN TableName b 
      ON a.UserID = b.PersonID AND 
       a.PersonID = b.UserID AND 
       a.Response = b.Response 
GROUP BY Person1, Person2 

假设你有这样的记录,

╔════════╦══════════╦══════════╗ 
║ USERID ║ PERSONID ║ RESPONSE ║ 
╠════════╬══════════╬══════════╣ 
║  1 ║  2 ║ yes  ║ 
║  2 ║  1 ║ yes  ║ 
║  3 ║  4 ║ no  ║ 
║  4 ║  3 ║ yes  ║ 
║  5 ║  6 ║ maybe ║ 
║  6 ║  5 ║ maybe ║ 
╚════════╩══════════╩══════════╝ 

查询的输出

╔═════════╦═════════╦══════════╗ 
║ PERSON1 ║ PERSON2 ║ RESPONSE ║ 
╠═════════╬═════════╬══════════╣ 
║  1 ║  2 ║ yes  ║ 
║  5 ║  6 ║ maybe ║ 
╚═════════╩═════════╩══════════╝ 
+0

非常好,但是,我怎样才能返回一个特定的用户?我的意思是,在客户仪表板中必须打印HE是人员ID的值。 – 2013-04-09 15:18:34

0
SELECT him.id as "him", 
her.id AS "her", 
FROM match him, match her 
WHERE him.id = her.id OR her.id=him.id; 

可以根据需要的程度了......相匹配的是/否/也许领域。

0

这项工作?

SELECT * FROM test t1 INNER JOIN test t2 ON t1.id = t2.personid AND t2.id=t1.personid WHERE t1.response=t2.response; 

http://www.sqlfiddle.com/#!2/9170c/1

如果你想为一个特定的响应(是的,可能)的结果,您可以添加在WHERE条件。

0

喜欢的东西:

Select Userid As p1, Personid p2 
From YourTable 
Where (Response like "Yes" OR Response like "Maybe") AND p2 IN(
Select Userid 
From YourTable 
Where Userid = p2 AND Personid = p1 AND (Response like "Yes" OR Response like "Maybe"); 
1

太感谢你了。根据你的回答,我已经达到了这个:

SELECT p2.atirador AS mutual 
FROM paqueras AS p1, paqueras AS p2 
WHERE p2.alvo = $UserID 
AND p1.atirador = $UserID 
AND p2.atirador = p1.alvo 
AND (
p1.resposta1 = "sim" 
OR p1.resposta1 = "talvez" 
) 
AND (
p2.resposta1 = "sim" 
OR p2.resposta1 = "talvez" 
) 

我做了什么?我会尝试解释,我会得到所有与用户ID相互关联的人。当用户访问他的相互页面时,这会很方便,你知道吗?

那么,迄今为止这么好...谢谢你们,我会报告任何错误。但是,我们希望不要;-)