2013-04-09 51 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相互關聯的人。當用戶訪問他的相互頁面時,這會很方便,你知道嗎?

那麼,迄今爲止這麼好...謝謝你們,我會報告任何錯誤。但是,我們希望不要;-)