0

大家,这个mysql查询在本地主机上正常工作

                $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    |                |
+------------+-----------------+------+-----+---------+----------------+

我需要为特定的导师选择科目。一位导师可以有更多的科目。这就是我在查询中使用“GROUP_CONTACT()”的原因。没有 group by 子句查询在本地主机上工作。但不是在网上。

4

1 回答 1

1

错误消息告诉您为什么会发生这种情况:您需要一个GROUP BY子句。

在不知道查询应该做什么以及您的数据是什么的情况下,很难说出您想要分组的确切内容。

我不确定我是否正确理解了您想要的内容,请尝试这是否适合您:

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 的东西。如果您的查询产生一个结果,您希望将多行合并为一个,那么您需要GROUP_BY my_column:合并那些在 column 中具有相等值的行my_column聚合函数用于控制其他列的合并方式。

于 2012-07-25T09:52:03.380 回答