2016-04-06 3 views
0

234,235のようなカンマ区切りのユーザーIDを格納するデータベーステーブルに "user_id"という名前のVARCHAR(255)フィールドがあります。そうで「234235」 :文字列をmysql IN()関数で使用するには?

(SELECT group_concat(concat(first_name,' ',last_name)) from users where user_id IN (s.user_id)) as user_name 

今、私はこのようs.user_id値を取得しています。「s」は私のテーブルの別名です

私は以下の通りである私のクエリ内の1つの内側のクエリを持っています私は最初のユーザーの名前だけを得ています。私は両方のユーザーの名前をカンマ区切りにしたい。 (IN()関数で動作するように=>( '234'、 '235')または(234,235)が必要)

クエリが長すぎるため、FIND_IN_SET()関数を使用することはできません。あなたが参照する必要がコンマ別の文字列のIDを格納

+0

それがすでに設計されていますように私は私のデータベースを変更することはできません – lad2025

答えて

0

は悪いデザインです。データを正規化し、データベースがネイティブにサポートする方法で格納する方がはるかに優れています。あなたは、文字列内のユーザーIDをルックアップする必要があるので、一つの解決策は、正規表現である、と述べた

これは遅いですし、別のテーブル/列でIDを再編成する価値はあると思います。

SELECT group_concat(concat(first_name,' ',last_name)) 
FROM users 
WHERE s.user_id REGEXP CONCAT('(^|,)', user_id, '($|,)') 

これは、いずれかの側または文字列の先頭や末尾にカンマであなたのIDと一致しました。

+0

誤解を避けるために、クエリ全体を投稿してください。 このクエリを試しましたが、NULLを返します。 – Sohil

+0

where句でuser_idフィールドを後方に移動しました。私の編集を見てください。 –

関連する問題