2014-10-19 46 views
0

我有表名relation_country那裏有三個欄 ID,country_a和country_b 和數據是這樣follwing ...如何找到並顯示(MySQL和PHP)

同一個表中的兩個不同列類似的詞語數量
id country_a country_b 
1 USA   France 
2 Australia USA 
3 France  Australia 
4 India  Rassia 
5 Rassia  USA 
6 France  Rassia 
7 USA   India 

在這裏,我看到美國和Rassia有他們的勝利關係。現在我想知道他們中有多少人有類似的國家(有)。

say, Rassia has France & India 
and USA has also France and India. 

我可以讓查詢顯示,美國有(法國,澳大利亞,印度) 和Rassia有(法國和印度) 但我不能表明,這兩個國家有類似的關係(印度和法國)。

請幫忙。

+0

可以請你發佈你的代碼來編輯它嗎? – Abkarino 2014-10-19 15:00:14

+0

拉斯亞是一個國家嗎? – 2014-10-19 15:23:28

+0

對不起,這將是俄羅斯。(是的,這是一個國家,我的意思是) – 2014-10-19 15:30:51

回答

0

對不起,花了這麼長時間我不得不把數據放在本地並測試它。

以下是你需要的代碼:

(SELECT DISTINCT `country_a` FROM `relation_country` WHERE(`country_b` ='USA' AND (`country_a` IN (SELECT `country_a` FROM `relation_country` WHERE `country_b`= 'Russia') OR `country_a` IN (SELECT `country_b` FROM `relation_country` WHERE `country_a`='Russia')))) UNION (SELECT DISTINCT `country_b` FROM `relation_country` WHERE(`country_a` ='USA' AND (`country_b` IN (SELECT `country_a` FROM `relation_country` WHERE `country_b`= 'Russia') OR `country_b` IN (SELECT `country_b` FROM `relation_country` WHERE `country_a`='Russia')))) 

以格式化形式:使用UNION DISTINCT爲值

(
SELECT DISTINCT `country_a` 
FROM `relation_country` 
WHERE (
    `country_b` = 'USA' 
    AND (
     `country_a` 
     IN (

     SELECT `country_a` 
     FROM `relation_country` 
     WHERE `country_b` = 'Russia' 
    ) 
     OR `country_a` 
     IN (

     SELECT `country_b` 
     FROM `relation_country` 
     WHERE `country_a` = 'Russia' 
     ) 
    ) 
    ) 
) 
UNION (

SELECT DISTINCT `country_b` 
FROM `relation_country` 
WHERE (
    `country_a` = 'USA' 
    AND (
    `country_b` 
    IN (

     SELECT `country_a` 
     FROM `relation_country` 
     WHERE `country_b` = 'Russia' 
    ) 
    OR `country_b` 
    IN (

    SELECT `country_b` 
    FROM `relation_country` 
    WHERE `country_a` = 'Russia' 
    ) 
    ) 
) 
) 

注意。

+0

如果它與您合作,請立即註冊並標記爲已解決。如果你想澄清一下,問問我。 – Abkarino 2014-10-19 17:03:57

+0

是的,它工作正常。還有一個想兄弟,我看到這些結果不包含在表中,我的意思是我怎麼能在頁面中顯示(網站)或者我怎樣才能使用你的代碼作爲PHP查詢直接進入代碼編輯器。正如我所說我真的是新的,你給我的這些代碼對我來說是全新的。 – 2014-10-20 01:44:02

+0

哥哥,非常感謝。我確實轉換到PHP,它運作良好。再次感謝你。 – 2014-10-20 04:14:15

0

是的,我給了美國,類似於Rassia

$USA1 = mysql_query("SELECT * FROM relation_country WHERE country_a= 'USA'"); 
$USA_numrows1 = mysql_num_rows($USA1); 

if($USA_numrows1!=0){ 
    while($row1 = mysql_fetch_assoc($USA1)){ 
     $country_b =$row1['country_b']; 
     echo $country_b."<br/>";    
    } 
} 

$ USA2 =請求mysql_query( 「SELECT * FROM relation_country WHERE country_b = 'USA'」); $ USA_numrows2 = mysql_num_rows($ USA2);

if($USA_numrows2!=0){ 
    while($row2 = mysql_fetch_assoc($USA2)){ 
     $country_a =$row2['country_a']; 
     echo $country_a."<br/>";    
    } 
} 

$ russia1 =請求mysql_query( 「SELECT * FROM relation_country WHERE country_a = '俄羅斯'」); $ russia_numrows1 = mysql_num_rows($ russia1);

if($russia_numrows1!=0){ 
    while($row3 = mysql_fetch_assoc($russia1)){ 
     $country_b1 =$row3['country_b']; 
     echo $country_b1."<br/>";   
    } 
} 

$ russia2 = mysql_query(「SELECT * FROM relation_country WHERE country_b ='russia'」); $ russia_numrows2 = mysql_num_rows($ russia2);

if($russia_numrows2!=0){ 
    while($row4 = mysql_fetch_assoc($russia2)){ 
     $country_a1 =$row4['country_a']; 
     echo $country_a1."<br/>";   
    } 
} 
+0

第一件事,這隻處理了一半數據。 如果美國在第一欄,你將不會處理。 – Abkarino 2014-10-19 15:43:10

0

如果我正確地理解了你,這裏是sql結果。只是爲了讓sql更容易跟隨創建以下視圖。

「create view xcountry as select country_a,country_b from relation_country union select country_b,country_a from relation_country;」

然後這個選擇

「選擇從xcountry country_b其中country_a = 'USA' 和country_b在(選擇xcountry country_b其中country_a = 'Rassia');」

結果是兩行;法國和印度。希望這有助於。

+0

這些代碼似乎夠短而且對我來說也是新的。你能解釋如何使用(在sql/php中)?請。 – 2014-10-20 04:24:01

+0

他加入表格兩次:一個正確,一個反轉,然後使用正常選擇到一列。 – Abkarino 2014-10-20 06:21:43

+0

沒錯。視圖只是對錶格的操縱。它不存儲數據,它只是以不同的方式來看待它。通過將表格與自身結合並將列顛倒,您可以看到所有國家都出現在第一列中的視圖。 「in」後面的選擇創建了一組與Rassia有關係的所有國家。在「進入」之前的選擇將獲得所有與美國有關係的國家,並且在該集合中。希望這可以幫助。 – 2014-10-20 12:00:51