0

皆さん、この mysql クエリは localhost で正常に動作しています

                $query3 = "SELECT tutor_category_subject.subject_id, GROUP_CONCAT( DISTINCT subject.subjects SEPARATOR ', ') AS teaching_subjects  
                            FROM tutor_category_subject
                            INNER JOIN subject ON tutor_category_subject.subject_id = subject.subject_id
                            WHERE tutor_category_subject.tutor_id = $teacherId";

しかし、ライブサーバーにアップロードすると、機能せず、このエラーメッセージが表示されます.

GROUP BY 句がない場合、GROUP 列を使用せずに GROUP 列 (MIN()、MAX()、COUNT()、...) を混在させることはできません。

これは、GROUP BY 句を使用しないクエリ出力です。

 +------------+-------------------------------+
| subject_id | teaching_subjects             |
+------------+-------------------------------+
|          8 | Art & Craft                   |
|         10 | Buddhism                      |
|         12 | Catholicism                   |
|         14 | Christianity                  |
|         16 | Dancing                       |
|         34 | Accounting                    |
|         37 | Business Studies              |
|         39 | Conbined Mathematics          |
|         42 | General Infomation Technology |
+------------+-------------------------------+

誰かが私に何が問題なのか教えてもらえますか?

ありがとうございました

テーブルの説明

mysql> describe tutor_category_subject;
+-------------+-----------------+------+-----+---------+----------------+
| Field       | Type            | Null | Key | Default | Extra          |
+-------------+-----------------+------+-----+---------+----------------+
| tcs_id      | int(4) unsigned | NO   | PRI | NULL    | auto_increment |
| tutor_id    | int(4) unsigned | NO   |     | NULL    |                |
| category_id | int(2) unsigned | NO   |     | NULL    |                |
| subject_id  | int(4) unsigned | NO   |     | NULL    |                |
+-------------+-----------------+------+-----+---------+----------------+

mysql> describe subject;
+------------+-----------------+------+-----+---------+----------------+
| Field      | Type            | Null | Key | Default | Extra          |
+------------+-----------------+------+-----+---------+----------------+
| subject_id | int(2) unsigned | NO   | PRI | NULL    | auto_increment |
| subjects   | varchar(60)     | NO   | MUL | NULL    |                |
+------------+-----------------+------+-----+---------+----------------+

特定のチューターの科目を選択する必要があります。1 人のチューターがより多くの科目を担当できます。そのため、クエリで「GROUP_CONTACT()」を使用しました。group by 句がないと、クエリはローカル ホストで動作します。しかし、オンラインではありません。

4

1 に答える 1

1

エラーメッセージは、それが起こる理由を教えてくれます: You need a GROUP BYclause.

クエリが何をすべきか、データが何であるかを知らずに、何をグループ化したいかを正確に言うことは困難です。

あなたが望むものを正しく理解しているかどうかはわかりません。これがあなたにとって正しいことをするかどうか試してください:

SELECT s.subject_id, GROUP_CONCAT(DISTINCT s.subjects)
FROM tutor_category_subject AS tcs
INNER JOIN subject as s 
    ON tcs.subject_id = s.subject_id
GROUP BY tcs.category_id
WHERE tcs.tutor_id = $teacherId

の SQL インジェクションに注意してください。$teacherId

ご覧のとおり、私はGROUPing のものを完全に削除しました。複数の行を 1 つに結合したいクエリの結果が得られた場合、それは必要なときですGROUP_BY my_column: column に等しい値を持つものをマージしますmy_column集計関数は、他の列がどのように正確にマージされるかを制御するために使用されます。

于 2012-07-25T09:52:03.380 に答える