2012-11-05 132 views
4
我的問題

示例模式在SQLFiddle和如下給出:選擇MYSQL列有條件

CREATE TABLE `players` (
    `player1id` int(11) NOT NULL, 
    `player2id` int(11) NOT NULL, 
    PRIMARY KEY (`player1id`,`player2id`) 
) ENGINE=InnoDB; 

INSERT INTO `players` values 
(1,5), 
(1,7), 
(5,3), 
(5,4), 
(2,1); 

在一個網絡遊戲,我要選擇對手,這可能是球員player1idplayer2id

實施例輸入/輸出需要

Input 1: Output 5, 7, 2 
Input 5: Output 1, 3 ,4 
& so on. 

也就是說,所需的數據可以是在任何列中,但我需要在有條件地單塔或任何其他方式輸出。我聽說過MySQL條件列,但無法創建查詢來獲取所需的輸出。有人可以請求幫助所需的查詢。

編輯

基於this link,我運行下面的查詢,但失敗了。

SELECT IF(PLAYER1ID IS 1,PLAYER2ID as opponent,PLAYER1ID as opponent) 
FROM players 
WHERE PLAYER1ID = 1 OR PLAYER2ID = 1; 

回答

5

我想你可以使用如下case when then語法:

SELECT CASE WHEN player1id = 1 THEN player2id ELSE player1id END 
FROM players WHERE player1id =1 OR player2id=1; 

或者:

SELECT CASE WHEN player1id = 1 THEN player2id WHEN player2id =1 THEN player1id END 
FROM players WHERE player1id =1 OR player2id=1; 
+0

謝謝Yogendra。我試着去'SELECT CASE WHEN player1id = 1 THEN player2id WHEN player2id = 1 THEN player1id 結束,因爲對手 從球員 WHERE player1id = 1 OR player2id = 1'基礎上添加您的回覆欄的自定義名稱。完善。 –

+0

@KapilSharma:感謝分享。很高興知道,它的工作。 –

3
select player1id from players where player2id=1 
union 
select player2id from players where player1id=1 

SQL FIDDLE DEMO

+0

感謝Anand,它的工作。但我更喜歡有條件的列和有問題的編輯部分的鏈接。它也有可能嗎? +1尋求幫助和工作解決方案。 –

+0

就像理由一樣,我在模式中只給出了最小的例子,但我必須從多個表中選擇數據,並且需要選擇至少15-20列。因此,在'union'之前和之後重複查詢兩次並不是有效的方式。不過,多虧了我提出了另一種方法,我相信在未來的其他情況下,這對我會有所幫助。 –

+0

是的,你說得對。我認爲只有2欄給了這個解決方案。 – AnandPhadke

2

這應該給你你在做什麼looki ng用於:

SET @PlayerId = 1; 
SELECT `player2id` AS 'Other Player ID' 
    FROM `players` 
WHERE `player1id` = @PlayerId 
    AND `player2id` != @PlayerId 

UNION 
SELECT `player1id` 
    FROM `players` 
WHERE `player2id` = @PlayerId 
    AND `player1id` != @PlayerId; 


SET @PlayerId = 5; 
SELECT `player2id` AS 'Other Player ID' 
    FROM `players` 
WHERE `player1id` = @PlayerId 
    AND `player2id` != @PlayerId 

UNION 
SELECT `player1id` 
    FROM `players` 
WHERE `player2id` = @PlayerId 
    AND `player1id` != @PlayerId; 
+0

謝謝亞歷山大。我從你的回覆中拿出了@ @ PlayerId'部分,並將它添加到@Yogendra Singh的回覆中。這將是有益的,因爲我們需要將變量放在4個接受答案的地方。 –