Задавайте вопросы, мы ответим
Вы не зашли.
Видимо Вы меня не поняли. С having и where мне вроде все ясно.
Неясен вопрос с group by.
При первом запросе, описанным в предыдущем сообщении, я получаю данные как и ожидал.
Выдает id=1, adres=Владивосток, name=Ласточка-Владивосток
Они приходят из таблицы указанной после union all
и даже поле B.name2 изменяется на name, т.к. в таблице указанной до union all колонка называется A.name
Но при поиске из первой таблице, данные не приходят.
Т.е. запрос having id='1' and adres='Москва' ничего не выдает.
Я же ожидал получить
id=1, adres=Москва, name=Ласточка-Москва
Данные я получаю правильно, когда добавляю group by, как описано во втором примере предыдущего сообщения.
Количество колонок одинаковое, некоторые колонки отличаются по названию, но учитывая, что поле name выдает мне поле значение в поле B.name2, я пришел к выводу, что упорядовачивание идет не по названию колонок, а по их порядку.
Отсюда становится неясным, почему я не получаю ожидаемым образом образом данные из запроса выше Union All. Я подумал, что если получу ответ, на то для чего здесь необходим group by для правильного получения данных, то это поможет мне понять роль и значение функции group by.
Неактивен
Кажется разобрался. Причина оказалась в том, что у меня выводились более 1 поля, а скрипт обрабатывал конструкцию, только тогда, когда было ровно одно.
В связи с этим, кажется стала проясняться работа group by. Насколько я понял, объединение group by функцией больше предназначена для математических действий, чем для работы со строками(даже по-моему что-то читал на эту тему), и подразумевает, что сгруппированные данные должны быть обработанны какой-либо функцией, суммированием к примеру, или как в моем случае слиянием текстовых полей с помощью group_concat.
Судя по выводу могу предположить, что если так, то в случае, если поля никак не группируются, не суммируются, то выводятся первые значения первого поля, остальные отсекаются.
Тем не менее хотелось бы выслушать мнение специалистов, обладающих большим опытом и знаниями в работе mysql, чем я. Поправьте меня если я ошибаюсь, дополните или хотя бы просто подтвертите. Буду крайне признателен любому высказываю.
Неактивен
Неактивен
Спасибо за ссылку.
Насколько понял, мои вывод о работе group by в общем и целом оказались верными, поправьте, если в чем-то ошибка. Т.е. повторяющиеся результаты должны быть объеденины в какую-то функцию, либо суммироваться, либо группироваться.
Неясным правда остался порядок вывода.
В первоначальной задаче, с group_concat и uning, поля дубрировались, и значения не имело, какое из полей необходимо выводить, т.к. они были идентичны.
Не очень ясно по поводу случайной выборки, порядок чтения и выдачи записей в любом случае должен присутствовать.
Неактивен
Группировка - это сжатие. Группируемая колонка должна быть превращена в одно значение - любым путем - сумма, максимальное значение, среднее значение... group_concat - из той же оперы - это просто создать ОДНУ строку (то есть одно значение) из КОЛОНКИ значений.
Если используется group by, то автоматически происходит сортировка по той колонке, по которой делается group by. А вообще порядок выдачи желательно задавать самим через order by.
Неактивен
Большое спасибо всем за ответ. Надо признать, что на данный момент вопросов по группированию данных и слиянии таблиц у меня не осталось.
Хотя, остался вопрос по изменению имени поля, или создания алианса для него, как в случае с union
Т.е. скажем
select * from(select TableA.id from TableA union all select TableB.id2 from TableB) TableC
получаю TableC.id, несмотря на то, что TableB.id2
Возможно нужного мне результата можно добиться и с union, но все равно хотелось бы знать можно ли как-то без union заменить поле id2, скажем в TableB, на id? Что может быть полезно, когда вывод уже сформирован, то есть я получаю на многих страницах переменную $array[id], из поля TableA, но мне нужно заменить ее на значение id2 из поля TableB, соответственно, чтобы не менять весь вывод, мне нужно получить именно $array[id], вместо $array[id2]
Отредактированно platedz (28.04.2012 01:34:01)
Неактивен
Подскажите, пожалуйста, а можно ли как-то записать условие где count(*) больше или равна какому-то числу.
Неактивен
Неактивен
Спасибо, большое вышло. Не сообразил про having при группировке.
Неактивен
platedz написал:
Подскажите, пожалуйста, а возможно ли выбрать все колонки кроме определенных. Т.е. скажем у меня в базе 3 колонки, table.id, table.name, table.adres, мне нужно выбрать все, кроме table.adres. Что-то навроде
select table.* кроме table.adres
Возможно ли записать как-то это "кроме" в Mysql запросе?
Наткнулся на одном форуме, что такое можно реализовать с помощью prepare. Но сколько не искал, так и не нашел доступной информации по данной функции и не разобрался как ей пользоваться. Может быть Вы поможете.
Неактивен
Неактивен