0

したがって、これは私が解決する必要がある問題です。データベース内のユーザーは、一定量のコースに従っています。これらのコースにはすべて番号が付けられているため、行の値はcoursesor12, 34, 56または12'' などになります。特定のコースをたどっているユーザーを見つけるために検索クエリを実行しています。を使用することを考えてLIKEいましたが、次のように一致させる必要があるため、非現実的な解決策のようです。

courses LIKE '$course,%' OR courses LIKE '%,$course,%' OR courses LIKE '%,$course' OR courses LIKE '$course'

合わせ方が4通りあるので、もっと良い解決策を期待していたのですが、自分ではまだ何も考えていません。創造的な解決策を持っている人はいますか? ありがとうございます。

4

3 に答える 3

3

MySQL はFIND_IN_SET()、カンマ区切りの値から値を検索するという関数を実装しています。

SELECT *
FROM   TableName
WHERE  FIND_IN_SET('12', 'comma separated value') > 0

テーブルの正規化を検討してください。コンマで区切られた値を単一の列に格納することは、非常に悪い考えです。

于 2013-04-08T08:21:07.970 に答える
0

courseDBに別のテーブルを追加し、さらにもう 1 つテーブルを追加して、coursesとの間のリンクを作成できusersます。

Users (id_user, name,  ...)
Courses (id_course, num_course, ...)

userHasCourse (id_user, id_course)

userHasCourse.id_userおよびuserHasCourse.id_courseは、Users および Courses テーブルの id の外部キーです。

各ユーザーのすべてのコース情報を取得できるようになりました

SELECT Users.name, Courses.num_course FROM Courses JOIN userHasCourse USING id_course JOIN Users USING id_user ORDER BY id_user

すべてのユーザーと関連する num_courses の配列を取得します。このソリューションは、コースに関する情報を追加したい場合に役立ちます (複数の番号)。

于 2013-04-08T08:25:58.687 に答える
-1

使ってみて

WHERE courses IN (12,34,56); 
于 2013-04-08T08:16:48.053 に答える