SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#51 27.04.2012 18:51:45

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Помогите Объединить две таблицы с GROUP_CONCAT или другим возможным способом

Видимо Вы меня не поняли. С 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.


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#52 27.04.2012 22:08:26

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Помогите Объединить две таблицы с GROUP_CONCAT или другим возможным способом

Кажется разобрался. Причина оказалась в том, что у меня выводились более 1 поля, а скрипт обрабатывал конструкцию, только тогда, когда было ровно одно.
В связи с этим, кажется стала проясняться работа group by. Насколько я понял, объединение  group by функцией больше предназначена для математических действий, чем для работы со строками(даже по-моему что-то читал на эту тему), и подразумевает, что сгруппированные данные должны быть обработанны какой-либо функцией, суммированием к примеру, или как в моем случае слиянием текстовых полей с помощью group_concat.
Судя по выводу могу предположить, что если так, то в случае, если поля никак не группируются, не суммируются, то выводятся первые значения первого поля, остальные отсекаются.

Тем не менее хотелось бы выслушать мнение специалистов, обладающих большим опытом и знаниями в работе mysql, чем я. Поправьте меня если я ошибаюсь, дополните или хотя бы просто подтвертите. Буду крайне признателен любому высказываю.


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#53 27.04.2012 22:15:05

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите Объединить две таблицы с GROUP_CONCAT или другим возможным способом

Неактивен

 

#54 28.04.2012 00:54:52

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Помогите Объединить две таблицы с GROUP_CONCAT или другим возможным способом

Спасибо за ссылку.
Насколько понял, мои вывод о работе group by в общем и целом оказались верными, поправьте, если в чем-то ошибка. Т.е. повторяющиеся результаты должны быть объеденины в какую-то функцию, либо суммироваться, либо группироваться.
Неясным правда остался порядок вывода.
В первоначальной задаче, с group_concat и uning, поля дубрировались, и значения не имело, какое из полей необходимо выводить, т.к. они были идентичны.
Не очень ясно по поводу случайной выборки, порядок чтения и выдачи записей в любом случае должен присутствовать.


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#55 28.04.2012 00:59:03

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите Объединить две таблицы с GROUP_CONCAT или другим возможным способом

Группировка - это сжатие. Группируемая колонка должна быть превращена в одно значение - любым путем - сумма, максимальное значение, среднее значение... group_concat - из той же оперы - это просто создать ОДНУ строку (то есть одно значение) из КОЛОНКИ значений.

Если используется group by, то автоматически происходит сортировка по той колонке, по которой делается group by. А вообще порядок выдачи желательно задавать самим через order by.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#56 28.04.2012 01:09:06

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Помогите Объединить две таблицы с GROUP_CONCAT или другим возможным способом

Большое спасибо всем за ответ. Надо признать, что на данный момент вопросов по группированию данных и слиянии таблиц у меня не осталось.

Хотя, остался вопрос по изменению имени поля, или создания алианса для него, как в случае с 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)


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#57 29.04.2012 19:25:22

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Помогите Объединить две таблицы с GROUP_CONCAT или другим возможным способом

Подскажите, пожалуйста, а можно ли как-то записать условие где count(*) больше или равна какому-то числу.

select count(*) from Table group by id


Т.е. нужно получить только те записи, количество которых, полученное функцией  count больше 1 или 2. Или равно одну, двум или трем.


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#58 29.04.2012 19:29:45

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите Объединить две таблицы с GROUP_CONCAT или другим возможным способом

select count(*) from Table group by id having count(*)<=3;

Неактивен

 

#59 29.04.2012 19:42:30

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Помогите Объединить две таблицы с GROUP_CONCAT или другим возможным способом

Спасибо, большое вышло. Не сообразил про having при группировке.


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#60 10.08.2012 02:01:19

platedz
Старожил
Зарегистрирован: 27.03.2012
Сообщений: 314

Re: Помогите Объединить две таблицы с GROUP_CONCAT или другим возможным способом

platedz написал:

Подскажите, пожалуйста, а возможно ли выбрать все колонки кроме определенных. Т.е. скажем у меня в базе 3 колонки, table.id, table.name, table.adres, мне нужно выбрать все, кроме table.adres. Что-то навроде
select table.* кроме table.adres
Возможно ли записать как-то это "кроме" в Mysql запросе?

Наткнулся на одном форуме, что такое можно реализовать с помощью prepare. Но сколько не искал, так и не нашел доступной информации по данной функции и не разобрался как ей пользоваться. Может быть Вы поможете.


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#61 10.08.2012 04:24:50

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите Объединить две таблицы с GROUP_CONCAT или другим возможным способом

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson