Здравствуйте, avpavlov, Вы писали:
N>>Как написано в документации по Mysql — http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html БД разрешает использовать GROUP BY с неагрегированными столбцами, или вычисления в списке выборки, которые не используются в GROUP BY. Или я перевожу неправильно?
A>Ты переводишь правильно, но не всё
A>A>The server is free to return any value from the group, so the results are indeterminate unless all values are the same.
A>Если у тебя u (юзер?) может быть больше чем в одной g (группе?) и они связаны через su (многие-ко-многим), то сервер будет возвращать тебе случайную g.name из связанных с данным юзером. То, что в одном запросе на своей машине ты получаешь именно ту, которая тебе нужна, не значит что в другой раз на другом сервере на другом наборе данных ты получишь тоже самое.
Да, у пользователя есть всегда определённая первичная группа, но на разных серверах он может иметь различный набор вторичных групп. Первый запрос возвращает gid первичной группы и перечисление через запятую вторичных. Второй запрос для gid пользователя возвращает её имя. Во втором запросе я ошибся(переделывал его из первого), группировать надо по полю su.id.
SELECT su.id, g.name FROM Table1 su, Table2 u, Table3 g
WHERE su.id=u.id AND u.gid=g.gid AND su.name='SOMENAME' GROUP BY su.id ORDER BY su.id