9

私の質問のスキーマの例は、SQLFiddleで次のように示されています。

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);

オンライン ゲームで、プレイヤーplayer1idまたはplayer2id.

例 入力/出力が必要

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

つまり、必要なデータは任意の列にある可能性がありますが、条件付きまたはその他の方法で単一の列に出力する必要があります。MySQL 条件付き列について聞いたことがありますが、必要な出力を取得するためのクエリを作成できませんでした。誰かが必要なクエリを手伝ってくれませんか。

編集

このリンクに基づいて、次のクエリを実行しましたが失敗しました。

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

3 に答える 3

15

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;
于 2012-11-05T05:51:22.143 に答える
3
select player1id from players where player2id=1
union
select player2id from players where player1id=1

SQL FIDDLE DEMO

于 2012-11-05T05:46:10.603 に答える
2

これにより、探しているものが得られるはずです。

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;
于 2012-11-05T05:57:06.323 に答える