Re[5]: Объединение запросов
От: Nameless  
Дата: 25.02.11 08:58
Оценка:
Здравствуйте, 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
--
Alexander
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.