1

重複の可能性:
mysqlは、数字がコンマ区切りのリストにあるかどうかを確認します

注: データベースを正規化するように言わないでください

わかりましたので、IDがカンマで区切られた別のテーブルに存在する場合、行のみをフェッチする必要があります...しかし、選択方法がわかりません

table1

script_id | name | user_id
+-------------------------+
   33       demo    256

table2

has_access| name |user_id
+-------------------------+
 33,34,56   demo    256

table1したがって、IDが列内に存在する場合にのみ行を返すtable2 has_access必要があり、さらに正確が必要なので、IDが33になるか333が異なる場合...正確な値の一致が必要です

4

5 に答える 5

3

Mysql にはFIND_IN_SET、まさにこの種のデータに対する機能があります。

.... WHERE find_in_set(table1.script_id,table2.has_access)

でも、我慢できなくてごめんね。

于 2013-01-16T19:14:17.640 に答える
2

何を言うべきか言わないでください。

最初にこれを読んでください:データベース列に区切られたリストを保存するのは本当に悪いことですか?
短い答え:はい、それは本当に悪いことです。

同様に、コンマで区切られた複数の外部キーを使用するのは間違っていますか?もしそうなら、なぜですか?
短い答え:はい、それは非常に、非常に間違っています。

データベースを正規化します。

于 2013-01-16T19:12:58.517 に答える
0

find_in_set mysql関数を見てみましょう(投稿にタグが付けられているので、これを使用していると思います)。試したことはありませんが、has_access列が文字列であるため、文字列を一致させる必要があり、333のようなものは33と一致しません。

于 2013-01-16T19:16:43.887 に答える
0

selecttable1。*fromtable1 join table2 on(table2.has_access = table1.script_id or table2.has_access like concat(table1.script_id、'、%')or table2.has_access like concat('%、'、table1.script_id、 ' 、%')またはtable2.has_access like concat('%、'、table1.script_id))

私はすべてのケースをカバーしたと思います。

于 2013-01-16T19:17:27.613 に答える
0

簡単な方法は次のとおりです。

select *
from table1
where concat(',', has_access, ',') like concat('%,', YOURIDTOTEST, ',%') 

これにより、各値がコンマ (区切り文字) で区切られます。次に、リストの最初と最後にコンマを置き、2 番目が最初のリストと「似ている」場合に一致します。

于 2013-01-16T19:12:54.540 に答える