2017-08-22 58 views
4

我有一個MySQL數據庫,類似於以下:MySQL查詢檢查相互值

uid   suid 
    1    5 
    1    6 
    2    5 
    5    1 
    5    2 

我通過POST方法給它一個獨特的「流體」,叫它1.我需要做什麼返回所有「suid」,其中$ uid「has」suid AND suid(as uid)「has」$ uid(as suid。)因此,在上例中,腳本應該只返回5.

我知道我的第一步是

"Select * FROM table Where uid = $uid" 

那麼也許我必須廁所p通過結果並查詢數據庫WHERE suid = $ uid。 我不知道如何做第二個查詢。有什麼建議麼?這裏

回答

1

一種選擇將是自連接,隨着加入的條件是uid在一個表匹配其他表suid,反之亦然在第一個表中suid

SELECT 
    t1.suid 
FROM yourTable t1 
INNER JOIN yourTable t2 
    ON t1.uid = t2.suid AND 
     t1.suid = t2.uid 
WHERE 
    t1.uid = 1 

之前或將WHERE條款,上面的查詢將返回兩個記錄:

uid | suid (uid not selected) 
1 | 5 
5 | 1 

然後WHERE條款選擇第一個紀錄,這也是我們所希望的,使用它你通過uid參數它。

演示在這裏:

Rextester

+0

好的。說我把它定義爲$ my_query。我可以使用$ result = $ conn-> query($ my_query); while($ row = $ result-> fetch_assoc()) – Sente

+0

你的問題含糊不清,而且我不是一個PHP人員。如果你對PHP有嚴重的障礙,你可能還想問另一個問題。我給你的查詢是有效的,並且會在MySQL上運行。 –

+0

好的。我會試一試,看看我得到了什麼。 – Sente

1

這是我想出了:

$uid = $_POST["UID"]; 

    $myquery = "SELECT * FROM Table WHERE uid = '$uid'"; 

    $result = $conn->query($myquery); 
    if ($result->num_rows > 0) { 

     while($row = $result->fetch_assoc()) { 

     $myquery2 = "SELECT * FROM Table WHERE uid = '" . $row['suid'] . "' AND suid = '$uid'"; 
     $result2 = $conn->query($myquery2); 

     if ($result2->num_rows > 0) { 

      while($row = $result2->fetch_assoc()) { 

        echo $row["uid"]. 
       "[email protected]#$"; 

     } 
     }  
    } 
} 

    $conn->close(); 
    ?> 

我覺得這是不漂亮,但它的伎倆。