0

更新しました

id  |  id_list
1   |  2,3,5,7
2   |  1,4,5,6
3   |  1,4,6,7
4   |  2,3,5,8
5   |  1,2,4,8
6   |  2,3,7,8
7   |  1,3,6,9
8   |  4,5,6,9
9   |  7,8

私は id=1 のコンテンツに達しているとしましょう

IDがid = 1のid_listにあるすべての行と、id = 1の行を選択したかった

したがって、結果は id = 1,2,3,5,7 の行になります

このクエリのやり方は?

4

7 に答える 7

1

自己結合を使用することもできます

使用するIN()

select * from atable a
join atable b on (a.id = b.id )
where 1 IN (a.id_list) or   b.id =1

IN() をいじる

使用するFIND_IN_SET()

select * from atable a
join atable b on (a.id = b.id )
where FIND_IN_SET('1', a.id_list) or   b.id =1

FIND_IN_SET() をいじる

使用するUNION ALL

select * from atable 
where id =1
UNION ALL 
select * from atable 
where 1 IN (id_list)

UNION ALL をいじる

于 2013-12-25T13:39:30.673 に答える
0

これを試してください(SQL-Fiddleを参照):

SELECT * FROM tbl 
WHERE id = 1
OR INSTR((SELECT id_list FROM tbl WHERE id = '1'), id) > 0;

MySQL5.5.30でテスト済み

于 2013-03-04T06:56:46.927 に答える
0

データベースの設計が壊れています。id_list文字列ではなく、結合テーブルとして表す必要があります。ただし、当面の問題を解決するには、次のようにします。

select * from table where id=1 
          or id_list like '1%' 
          or id_list like '%,1,%'
          or id_list like '%,1'

必要に応じて調整しますPreparedStatement。3つのケースすべてを提供する必要があります。

  or id_list like '%1%'

id_list値が含まれていると11、誤った一致が発生します

于 2013-03-04T06:57:57.790 に答える
-1

あなたの質問に対する答えはありませんが、このようにテーブルを再設計することをお勧めしますこれは多対多の関係を呼んだと思います

id  |  friend
1   |    2
1   |    3
1   |    5
1   |    7
2   |    1
2   |    4
2   |    5
2   |    6
3   |    1
3   |    4
3   |    6
3   |    7

そして、あなたのクエリはこのようになります

SELECT DISTINCT(friend) FROM `new` WHERE id = 1
于 2013-03-04T07:07:01.667 に答える
-1

私はあなたがphpを使用していると仮定しています..
私の提案は、id 1のid_listを取得すること です。
そのid_listをコンマで展開し、別のmysqlクエリを実行して、5 | 3 | 6 | 8
ex) $idarrayの残りの結果を取得します= 爆発 (",", $result);
select * from your_table where id in ('5','3','6','8')


オプション 2:


SELECT * FROM your_table
WHERE id = '1'
OR id IN ('\''+(SELECT REPLACE(id_list,',','\',\'') FROM your_table WHERE id = '1')+'\'')




編集: おっと、申し訳ありませんが、代わりに OR にする必要があります。

于 2013-03-04T06:33:00.457 に答える