0

私はデータベースの学習者です。非常に基本的な質問をしていると思いますが、ご容赦ください。

テーブルから値のリストを取得したかったのです。値のリストは、いくつかの基準に従って並べ替えられます。

例: collegeテーブルにcourseOfferedという名前の列があり、そこにjava、c++、android などの文字列を保存しています。

userテーブルにprimarySubjectsecondarySubjectという別の 2 つの列があります。

私の最初のフェッチ ロジックは、primarySubjectによると、college テーブルの行の値はリストの最初の優先度でなければならず、secondarySubjectによれば、college テーブルの行の値はリストの 2 番目の優先度でなければならず、残りの値は最後に追加されます。primarySubjectまたはsecondarySubjectとは無関係です。

これまでに試したこと:

SELECT *
FROM test.college
WHERE Courses_Offered LIKE CONCAT('%',RTRIM((SELECT
                           Primary_Subject
                         FROM test.user
                         WHERE Email = 'r.veer7@gmail.com')),'%')
     OR Courses_Offered LIKE CONCAT('%',RTRIM((SELECT
                         Secondary_Subject
                           FROM test.user
                           WHERE Email = 'r.veer7@gmail.com')),'%')
     OR LOWER(Location)IN(SELECT
                LOWER(Location)
              FROM test.user
              WHERE Email = 'r.veer7@gmail.com')

上記のクエリはすべてのデータをフェッチしますが、上記のようには行がテーブルに保存されません。上記のクエリのすべてのフェッチをグループ化する必要があります。どうすればよいですか?

4

1 に答える 1

1

このように、groupbyとorderbyを使用できます

SELECT *
FROM test.college
WHERE Courses_Offered LIKE CONCAT('%',RTRIM((SELECT Primary_Subject FROM test.user WHERE Email = 'r.veer7@gmail.com')),'%')
     OR Courses_Offered LIKE CONCAT('%',RTRIM((SELECT Secondary_Subject FROM test.user WHERE Email = 'r.veer7@gmail.com')),'%')
     OR LOWER(Location)IN(SELECT LOWER(Location) FROM test.user WHERE Email = 'r.veer7@gmail.com')
GROUP by college.column_name
ORDER BY college.first_column_name ASC , college.second_column_name DESC
于 2013-02-25T06:41:36.460 に答える